求n!。当n很大的时候,会超出整数的范围。

这里用数组来进行高精阶乘。a[1]是个位,a[2]是十位......依次类推。每次要乘一个数的时候,就从个位(即a[1])开始乘这个数,>10的时候要%10再进位。

 

 1 #include<cstdio>
 2 #include<cstring>
 3 const int N=100000;
 4 
 5 int a[N];
 6 int i, j, n;
 7 int t, pos/*位数*/, carry/*进位*/;
 8 
 9 int main()
10 {
11     while(scanf("%d", &n)==1)
12     {
13         memset(a, 0, sizeof(a));
14         a[1]=1;
15         pos=1;
16         carry=0;
17 
18         for(i=2; i<=n; i++)
19         {
20             for(j=1; j<=pos; j++)
21             {
22                 t=a[j]*i+carry;
23                 a[j]=t%10;
24                 carry=t/10;
25             }
26             while(carry)
27             {
28                 t=carry;
29                 pos++;
30                 a[pos]=t%10;
31                 carry=t/10;
32             }
33         }
34 
35         for(i=pos; i>=1; i--)
36             printf("%d", a[i]);
37         puts("");
38     }
39     return 0;
40 }

 

posted on 2015-03-10 21:00  咋是你呀~  阅读(156)  评论(0编辑  收藏  举报