#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); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。