HDU 1042 N! (大数阶乘)

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1042

思路:大数阶乘

代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #define N 40000 
 5 int s[N];
 6 int main()
 7 {
 8     int i,j,k,t,n;
 9     while(scanf("%d",&n)!=EOF)
10     {
11         memset(s,0,sizeof(s));//每次使用前都要清零 
12         s[0]=1;    //相当于s数组存贮的大数000001
13         for(i=2;i<=n;i++)//计算n! 
14         {
15             for(t=0,j=0;j<N;j++) //t为进位数,s[j]存贮当前位的数, 
16             {
17                 k=s[j]*i+t;//得到i!当下次i++时,就得到i++的阶乘。(3!=2!*3) 
18                 s[j]=k%10;//对10取余得到当前最低位 
19                 t=k/10;//看是否进位,若进位的话就加上
20             }
21         } 
22         for(i=N-1;!s[i];i--);//除去前导0 
23         printf("%d",s[i]);// 第一个元素不要求输出多余的0
24         while(i)
25         printf("%d",s[--i]);//这些要输出前面多余的0
26         putchar('\n');
27     }
28     system("pause");
29     return 0;
30 } 
31      

posted on 2012-08-24 09:06  mycapple  阅读(412)  评论(0编辑  收藏  举报

导航