代码及注释:
#include<stdio.h>
#include<string.h>
const int maxn = 3000;
int f[maxn];
int main()
{
int i, j, n;
int c, s;
scanf("%d", &n);
memset(f, 0, sizeof(f));
f[0] = 1;
for (i = 2; i <= n; i++)
{
c = 0;
//乘以i,并用数组f[]存储每一位
for (j = 0; j < maxn; j++)
{
s = f[j] * i + c;//模拟手算:用数的每一位乘以i
f[j] = s % 10;
c = s / 10;
}
}
j = maxn + 1;
while (f[--j] == 0);//忽略前导0
for (i = j; i >= 0; i--)
{
printf("%d", f[i]);
}
return 0;
}