加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 03:15:55 所属栏目:大数据 来源:网络整理
导读:#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};? ? ?
#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("%dn",k); printf("weishu:%dn",(k-1)*M0+getW(a[k-1])); ? ? } ? ? return 0;? } int getW(int n)? { ? ? char ts[M0+2]; ? ? sprintf(ts,"%d",n); ? ? return strlen(ts); }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读