链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=28
题目
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
题解
- 可以用大整数来做,也可以使用大整数的原理分块存储计算
- 由题意输入只有一个数字,故不用考虑打表
代码(C)
#include <stdio.h>
int a[20000]={0}; //定义存储数组;反向存
int main(){
int n;
scanf("%d", &n);
int len=0,s,jin=0; //s每位的计算结果,jin进位,len数据位数
a[0]=1;
for(int i=2;i<=n;i++){ //从2开始进行阶乘
for(int j=0;j<=len;j++){
s=a[j]*i+jin;
a[j] = s%10;
jin = s/10;
if(j==len && jin!=0)
len++;
}
}
for(int z=len;z>=0;z--) //反向输出结果
printf("%d",a[z]);
printf("\n");
return 0;
}
运行结果
Result Accept Time 380MS Memory 316 Language C