本文共 806 字,大约阅读时间需要 2 分钟。
大数。不过这道题的数真的大得很可怕,大到一段时间内一直怀疑是不是自己算法错了。
代码如下:
#include#include long long a[2701]; //10000!至少有30000+几千位,每个数组元素存储14位的数字int main(){ int n,i,j; int start,first,pre; long long mod=1; for(i=1;i<=14;i++) mod*=10; while(~scanf("%d",&n)) { if(n==0) printf("1\n"); else { memset(a,0,sizeof(a)); a[2700]=1; for(i=1;i<=n;i++) //大数乘法 { for(j=2700;j>=0;j--) //每个数位上的数字都乘以这个数 a[j]*=i; for(j=2700;j>=0;j--) //乘完后再取余 { if(a[j]>=mod) { a[j-1]=a[j-1]+a[j]/mod; a[j]%=mod; } } } start=0;first=1; for(i=0;i<=2700;i++) { if(a[i]!=0) start=1; if(start) { if(first) { first=0; printf("%lld",a[i]); } else printf("%014lld",a[i]); } } printf("\n"); } } return 0;}
转载地址:http://rfdci.baihongyu.com/