准确计算大数的阶乘

注意:要提前预算结果的位数。


#include <stdio.h>
#include <string.h>

const int maxn = 3000;
int f[maxn];
int main()
{
int i, j, n;
while(~scanf("%d", &n))
{
memset(f, 0, sizeof(f));
f[0] = 1;
for(i = 2; i <= n ; i++)//每次乘以i
{
int c = 0;
for(j = 0; j < maxn; j++)//对每一位进行单位操作
{
int s = f[j] * i + c;
f[j] = s%10;
c = s/10;
}
}
for(j = maxn - 1; j >= 0; j--)//消除前导0
{
if(f[j])
break;
}
for(i = j; i >= 0; i--)
{
printf("%d", f[i]);
}
printf("\n");
}
return 0;
}