大数阶乘
时间限制:3000ms | 内存限制:65535KB
难度:3
- 描述
- 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
- 输入
- 输入一个整数m(0<m<=5000) 输出
- 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入
-
50
样例输出 -
30414093201713378043612608166064768844377641568960512000000000000
#include "stdio.h"
#define maxn 18000
int a[maxn];
int main()
{int m,i,index,c; // 0<m<=5000 ,m=5000时数据有 16326 位数据 scanf("%d",&m);a[0]=1; index=0; m++;if(m>=0 && m<=5000){while(--m){c=0;for(i=0;i<=index;i++){c=m*a[i]+c; a[i]=c%10; c/=10; }while(c) {a[++index]=c%10;c/=10;}}}for(i=index;i>=0;i--)printf("%d",a[i]);printf("\n");return 0;
}
算法思路 形如小学生算式计算