/* 大数阶乘 输入 输入一个整数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; }
NYOJ 28.大数阶乘
最新推荐文章于 2018-05-26 11:50:13 发布