1019: 大数阶乘
时间限制: 3000 Sec 内存限制: 65535 MB提交: 43 解决: 10
[ 提交][ 状态][ 讨论版]
题目描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000
提示
来源
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int a[1000000];//大数组函数外定义百万级
int main(int argc, char *argv[])
{
//模拟手算
int n;
int i,sum,j,len;
while(scanf("%d",&n)!=EOF){
memset(a, 0, sizeof(a));
if(!n) {printf("1\n");continue;}
a[0] = 1;
for(i=1,sum=1,len=1;i<=n;i++){
for(j=0;j<len;j++)//模拟手算进位机制 按位乘
a[j]*=i;
for(j=0;j<len;j++){
if(a[j]<10) continue; //最高位不大于10则不需要进位处理
int pos=j; //记录当前最高位
while (pos<len)
{
if(a[len-1]>9) len++;
a[pos+1]+=a[pos]/10;
a[pos]%=10;
pos++; //进位处理
}
}
}
for(j=len-1;j>=0;j--)
printf("%d",a[j]);
printf("\n");
}
//system("PAUSE");
return 0;
}