大数相乘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 }        
View Code

 


把第二个数分别与第一个数的个位、十位等相乘

 

 

posted @ 2013-08-19 22:34  心中的阿哲  阅读(133)  评论(0编辑  收藏  举报