【大数阶乘】NYOJ-28
大数阶乘
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
- 输入
- 输入一个整数m(0<m<=5000)
- 输出
- 输出m的阶乘,并在输出结束之后输入一个换行符
- 样例输入
-
50
- 样例输出
-
30414093201713378043612608166064768844377641568960512000000000000
- 【代码】
1 //NYOJ-28 大数阶乘 2 //直接开足够大的数组,模拟竖式运算,进位。 3 #include <cstdio> 4 #include <cstring> 5 const int maxn = 20000; 6 int f[maxn]; 7 int main() { 8 int i,j,n,s,c; 9 scanf("%d", &n); 10 memset(f, 0, sizeof(f)); 11 f[0] = 1; 12 for(i = 2; i <= n; i++) { 13 c = 0; 14 //进位 15 for(j = 0; j < maxn; j++) { 16 s = f[j] * i + c; 17 f[j] = s % 10; 18 c = s / 10; 19 } 20 } 21 for(j = maxn-1; j >= 0; j--) if(f[j]) break; 22 for(i = j; i >= 0; i--) printf("%d", f[i]); 23 printf("\n"); 24 return 0; 25 }
梦想要一步步来!