1. 程式人生 > >NYOJ 28.大數階乘

NYOJ 28.大數階乘

/* 大數階乘 輸入 輸入一個整數m(0<m<=5000) 輸出 輸出m的階乘,並在輸出結束之後輸入一個換行符 樣例輸入 50樣例輸出 30414093201713378043612608166064768844377641568960512000000000000 */

#include<stdio.h> #include<string.h> #define N 40000 int s[N]; int main() {      int i,j,k,t,n;      while(scanf("%d",&n)!=EOF)      {          memset(s,0,sizeof(s));//每次使用前都要清零          s[0]=1;    //相當於s陣列存貯的大數000001          for(i=2;i<=n;i++)//計算n!          {             for(t=0,j=0;j<N;j++) //t為進位數,s[j]存貯當前位的數,             {               k=s[j]*i+t;//得到i!當下次i++時,就得到i++的階乘。(3!=2!*3)               s[j]=k%10;//對10取餘得到當前最低位               t=k/10;//看是否進位,若進位的話就加上             }          }          for(i=N-1;!s[i];i--);//除去前導0          printf("%d",s[i]);// 第一個元素不要求輸出多餘的0          while(i)          printf("%d",s[--i]);//這些要輸出前面多餘的0          printf("\n");      }      return 0; }