链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=28
大数阶乘
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
- 输入一个整数m(0<m<=5000) 输出
- 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入
-
50
样例输出
-
30414093201713378043612608166064768844377641568960512000000000000
大数阶乘,也是模拟,要有基本思路
代码:
#include<stdio.h>
int main()
{
int large_num[16326] = { 1 };
int num, zero = 0;
int i, j, k, n;
int top;
scanf("%d", &num);
for (i = 2, top = 1; i <= num; i++){
k = i;
while (k % 10 == 0){
k /= 10;
zero++;
}
for (j = 0; j < top; j++)
large_num[j] *= k;
for (n = 0; ; n++){
large_num[n + 1] += large_num[n] / 10;
large_num[n] %= 10;
if (n + 1 == top){
if (large_num[n + 1] != 0)
top++;
else
break;
}
}
}
for (i = top - 1; i >= 0; i--)
printf("%d", large_num[i]);
for (i = 0; i < zero; i++)
printf("0");
printf("\n");
return 0;
}