#include
#include
const int maxn=3000;
int f[maxn]; //用int 数组来存储 每一位的数值 如 123 则存储 为 {3,2,1,0...0} 存储方式是倒序的 根据代码看出来的
int main()
{
int i,j,n; //i,j为普通迭代变量 n 为求解的 n! 中的 n
scanf("%d",&n);
memset(f,0,sizeof(f));
f[0]=1; //因为以后要用乘法 这里的个位
for(i=2;i<=n;i++) // 重 n!中的 2 开始乘 直到n
{
int c=0; //进位为0
//下面是一个大数乘法
for(j=0;j {
int s=f[j]*i+c; // 每一位都乘 i
f[j]=s%10; //每一位都只留下 个位数
c=s/10; //记下 进位的值 算到下一位的时候 加上
}
}
//下面是输出大数
for(j=maxn-1;j>=0;j--)
if(f[j]) break; //重最后都是0部分 用j记下第一个不是0 位数 集 最高位
for(i=j;i>=0;i--)
printf("%d",f[i]); //重最高位 j 开始到 0 输出 每位数
return 0;
// 结束
//ps: 这道题只要明白 大数的乘法 就行了 其他部分都很简单的
}