问题 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 }     
View Code

 

posted on 2016-08-17 16:44  椿和湫  阅读(170)  评论(0编辑  收藏  举报

导航