NYOJ28-大数阶乘

 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         

你可能感兴趣的:(阶乘)