问题 A: 大数阶乘
题目描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000
1 /* 2 解题思路: 3 1.大数问题,关键是处理好进位和当前最低位的关系。需要设一个变量(初始值 为0)来保存进位值。 4 2.每次相乘得到的结果加进位变量,等于临时值,通过临时值%得当前最低位,临时值/10得进位值。 5 3.这样乘得的结果是倒序的,因此需要倒序输出,还应注意前导0的问题,从数组最后开始,跳过前导0, 6 直到第一个不为0的数字开始输出。*/ 7 8 #include<stdio.h> 9 int a[1000001]; 10 int main() { 11 int m; 12 scanf("%d", &m); 13 int len=1; 14 a[1] = 1; 15 for(int i = 2; i <= m; ++i) { 16 int k = 0; 17 for(int j = 1; j <= len; ++j) { 18 int t = a[j] * i + k; 19 a[j] = t % 10; 20 k = t / 10; 21 if(j == len && k != 0) 22 len ++; 23 } 24 } 25 for(int n = len; n > 0; --n) 26 printf("%d",a[n]); 27 printf("\n"); 28 return 0; 29 }