大数阶乘问题数组元素存取多位数

#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); }

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...