1172:求10000以内n的阶乘
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 22142 通过数: 5506
【题目描述】
求10000以内n的阶乘。
【输入】
只有一行输入,整数n(0<=n<=10000)。
【输出】
一行,即n!的值。
【输入样例】
4
【输出样例】
24
【分析】
大整数n的阶乘问题,实际上就是高精乘低精,可以用分段表示法进行压位。
【参考代码】
#include<stdio.h> #include<math.h> #define MAX 100000 int a[MAX]={1}; int fact(int n) { int i,j,c,m=0,w; for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]*i+c; c=a[j]/10000; // 数组的每个元素最大存放9999,超过9999则进位。 a[j]=a[j]%10000; } if(c>0) { m++; a[m]=c; } } w=(int)(m*4+log10(a[m])+1); return m; } int main() { int i,n,sum; scanf("%d",&n); sum=fact(n); printf("%d",a[sum]); for(i=sum-1;i>=0;i--) printf("%04d",a[i]); printf("\n"); return 0; }
http://ybt.ssoier.cn:8088/problem_show.php?pid=1172