#include <cstdio>
#include <string.h>
using namespace std;
const int maxn=50000;
int f[maxn];
int main()
{
int i,j,n;
while(scanf("%d",&n)!= EOF)
{memset(f,0,sizeof(f));
f[0]=1; //先让个位为1
for(i=2;i<=n;i++) //从2一直乘到n
{
int c=0; //c保留进位数
for(j=0;j<maxn;j++) //遍历f数组
{
int s=f[j]*i+c; //计算每一位的值
f[j]=s%10; //每次乘后更新数组的值
c=s/10; //c保留进位数
}
}
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;
}
数组开50000,感觉自己真正融入在题目中的时候才能做出来

994

被折叠的 条评论
为什么被折叠?



