微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

#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 举报,一经查实,本站将立刻删除。

相关推荐