大数相乘nyoj28
描述我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
- 输入
- 输入一个整数m(0<m<=5000)
- 输出
- 输出m的阶乘,并在输出结束之后输入一个换行符
- 样例输入
-
50
- 样例输出
-
30414093201713378043612608166064768844377641568960512000000000000
1 2 #include <stdio.h> 3 #include <string.h> 4 #define M 20000 5 int shu[M]; 6 7 int main() 8 { 9 int m, i, n, b, t, e; 10 while(scanf("%d", &m) != EOF){ 11 12 memset(shu, 0, sizeof(shu)); 13 shu[0] = 1; 14 n = 0;/*n表示存放进位*/ 15 for(i = 1; i <= m; i++) 16 { 17 t = 0;/*t表示进位的数值*/ 18 e = 0;//记得初始化 19 for(b = 0; b <= n; b++) 20 { 21 // shu[b] *= i; 22 // shu[b+1] = shu[b] / 10; 23 // shu[b] %= 10; 24 e = shu[b] * i + t; 25 t = e / 10; 26 shu[b] = e % 10; 27 if(b == n && t != 0)/*为什么要有个b == n?因为有时不是在最高位进1,会产生多余的n++影响输出结果*/ 28 n++; 29 } 30 31 } 32 for(i = n; i >= 0; i--){ 33 34 printf("%d", shu[i]); 35 36 } 37 putchar('\n'); 38 39 } 40 return 0; 41 }
把第二个数分别与第一个数的个位、十位等相乘