下面链接是java的实现,思路叫清晰点
https://blog.51cto.com/6631065/2044441
#include <stdio.h>
void Print_Factorial ( const int N );
int main() {
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}
void Print_Factorial(const int N) {
#define MAX 5000
int a[MAX]= {0},tmpA[MAX]= {0},b[4]= {0};
int k,i,flag,j,temp,bit,l;
int f1=0,f2=0,f3=0;
/* 如果小于0大于1000直接返回输入错误*/
if(N <0 || N >1000) {
printf("Invalid input\n");
return;
}
/*等于0输出1*/
else if(N == 0) {
printf("%d\n",1);
return ;
}
/*大于0小于1000*/
else {
/*将数组a的第一位赋值为1,其余赋值为零*/
a[0] =1;
for(i=1; i<=N; i++) {
b[0]=b[1]=b[2]=b[3]=0;
flag =i;
/*将N的各位数进行分解,放入数组b中*/
k=0;
while(flag > 0 && k<4) {
b[k] = flag %10;
flag = flag /10;
k++;
}
temp =0;
bit =0;
for(j=0; j<4; j++) {
/*使用tmpA存储的数值与b数组相乘,结果存到a数组中*/
for(l=0; l<MAX; l++) {
temp = a[l] *b[j];
tmpA[l+j]+= temp;
}
}
for(k=0; k<MAX-1; k++) {
if(tmpA[k]>=10) {
temp = tmpA[k];
tmpA[k] = tmpA[k] %10;
tmpA[k+1] = tmpA[k+1]+temp/10;
}
}
for(k=0; k<MAX; k++) {
a[k] = tmpA[k];
tmpA[k] =0;
}
}
}
printf("\n");
f3=0;
for(k=MAX-1; k>=0; k--) {
if(a[k] >0) f3=1;
if(f3>0)printf("%d",a[k]);
}
}
下面链接是java的实现,思路叫清晰点
https://blog.51cto.com/6631065/2044441