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