1 2 3
1 2 6
思路: 转化为像100000这样的比较大型的进制,然后就可以解决大数数位比较多的问题。 代码如下: #include<stdio.h> #include<string.h> int sum[20000];//用于存储大数的每一个数位,只不过因为进制是100000,不超过100000的还保留在sum[i]的以为上 int main() { int n,i,j; while(~scanf("%d",&n)) { memset(sum,0,sizeof(sum)); sum[0]=1;//0的阶乘是1,初始化为1 for(i=2;i<=n;i++) { for(j=0;j<20000;j++) { sum[j]*=i; } for(j=0;j<20000;j++) { sum[j+1]+=sum[j]/100000;//判断是否要进位 sum[j]%=100000; } } for(i=19999;i>=0&&!sum[i];i--);//消除前导0 printf("%d",sum[i--]); for(;i>=0;i--) { printf("%05d",sum[i]);//因为是100000进制的不足的时候,前面要补零 } printf("\n"); } return 0; }
hdu 1042 N!(大数阶乘,转化为100000这样的比较大的进制),布布扣,bubuko.com
hdu 1042 N!(大数阶乘,转化为100000这样的比较大的进制)
原文地址:http://blog.csdn.net/ice_alone/article/details/38710233