#include <stdio.h> #include <memory.h> #include <string.h> #define N ((int)1e6+5) #define M ((int)1e7) //每个元素存M位 #define M0 7 long long a[N]; int getW(int n); int main() { int n; while(scanf("%d",&n)==1){ // int a[N]={1}; memset(a,sizeof(a)); //从低位到高位存储大数 a[0]=1; int k=1; //当前k位数 //计算阶乘 for(int i=2;i<=n;i++){ //当前大数a乘以i int jin=0; for(int j=0;j<k;j++){ //当前位乘积+进位 a[j]=a[j]*i+jin; jin=a[j]/M; //进位 a[j]=a[j]%M; //当前位 } //处理最高位进位 while(jin){ a[k++]=jin%M; //当前位 jin/=M; //进位 } } //输出从高位到低位 printf("%d",a[k-1]); //解决前导0问题 for(int i=k-2;i>=0;i--){ int tl=getW(a[i]); for(int j=tl;j<M0;j++) printf("0"); printf("%d",a[i]); } printf("\n"); // printf("%d\n",k); printf("weishu:%d\n",(k-1)*M0+getW(a[k-1])); } return 0; } int getW(int n) { char ts[M0+2]; sprintf(ts,"%d",n); return strlen(ts); }