我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入一个整数m(0<m<=5000)
输出m的阶乘,并在输出结束之后输入一个换行符
#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; }
