大数阶乘
大数阶乘算法 前几天朋友问我一个问题:“10000的阶乘怎么算?”当时我就有点懵,“10000”这个数字太大了,无论用什么数据类型保存结果都会溢出。这可怎么办呢?一时间束手无策。然后被一顿鄙视。后来经朋友的提醒,才恍然大悟,终于知道怎么实现了,原来是使用数组来模拟数字,这样无论结果数字有多大,只要数组的长度够长就能表示出来,用这个办法可以进行大数据的运算。看起来还是挺有用的。我把它用程序实现出来,如果有用到的地方还可以借鉴一下。(最起码还可以拿来鄙视别人^_^) ? #include <stdio.h> int main() { ????int carry,n,j; ????int a[40001]; ????int digit; ????int temp,i;??? ????while(scanf("%d",&n)!=EOF){ ????a[0]=1;digit=1; ????for(i=2; i<=n; i++) ????{ ????????for(carry=0,j=1; j<=digit; ++j) ????????{ ????????????temp=a[j-1]*i+carry; ????????????a[j-1]=temp%10; ????????????carry=temp/10; ????????} ????????while(carry) ????????{ ????????????//digit++; ????????????a[++digit-1]=carry%10; ????????????carry/=10; ????????} ????} ??? ????for(int k=digit; k>=1; --k) ????????printf("%d",a[k-1]); ????printf("n"); ?printf("length=%dn",digit); ?} ????return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |