大数阶乘算法
大数阶乘算法 前几天朋友问我一个问题:“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;} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |