10000!大概有35660位。
开始我把数组只开到27000位,结果老是WA,后来百度了一下10000!的位数才发现自己数学太捉急了。
大概应该这样算,1000到9999共9000 * 3 = 27000个0;100到999共900 * 2 = 1800个0;10!是7位,这样非末尾0相乘共有1000*7=7000位,综上,合计位数大约35000多位,保险起见,数组开到40000;
附ac代码:
#include <stdio.h>
#include <string.h>
#define MAX 40000
int A[MAX];
int find(){
int i = MAX;
while(!A[--i])
;
return i;
}
int main(){
int n, i, j, k, m;
while(scanf("%d", &n) == 1){
if(n < 2){
printf("1\n");
continue;
}
memset(A, 0, sizeof(A));
A[0] = 1; //A[0]是最低位
for(i = 2; i <= n; ++i){
k = find();
for(j = 0; j <= k; ++j){
A[j] *= i;
//在完成一轮乘法后再进位
}
//处理进位
for(m = 0; m <= k || A[m] > 9; ++m)
if(A[m] > 9)
A[m + 1] += A[m] / 10, A[m] %= 10;
}
k = find();
for(i = k; i >= 0; --i)
printf("%d", A[i]);
printf("\n");
}
return 0;
}