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

大数问题,两大数相乘 +方法1

发布时间:2020-12-14 04:09:17 所属栏目:大数据 来源:网络整理
导读:int mul[1000]; int a1[100],b1[100];? int lena,lenb; void output() ? //输出结果 { int i,pos; for(i=999;i=0;i--) if(mul[i]!=0) {pos = i; break;} for(i=pos;i=0;i--) printf("%d",mul[i]); printf("n"); } int mov(int *c,int n) { int pos,i; for(i
int mul[1000]; int a1[100],b1[100];? int lena,lenb; void output() ? //输出结果 { int i,pos; for(i=999;i>=0;i--) if(mul[i]!=0) {pos = i; break;} for(i=pos;i>=0;i--) printf("%d",mul[i]); printf("n"); } int mov(int *c,int n) { int pos,i; for(i=199;i>=0;i--) ?//找到c数组中的最高位 if(c[i]!=0) {pos=i;break;}? for(i=pos;i>=0;i--) ? //将数组往后面移动n位 c[i+n] = c[i]; for(i=0;i<n;i++) c[i] = 0; ? ? ? ?//往前面补0 return (pos+n); ? ? ? //返回最高位位置 } void cheng() { int i,j,k; int c[200]; memset(c,sizeof(c)); for(i=0;i<lenb;i++) { for(j=0;j<lena;j++) { c[j] = a1[j]*b1[i]; ? //被乘数的每一位乘以乘数的一位 } mov(c,i); for(k=0;k<200;k++) ?//把乘积累加起来 mul[k]+=c[k]; int sum=0; for(k=0;k<999;k++) ? //产生进位处理 { sum +=mul[k]; mul[k] = sum%10; sum/=10; } memset(c,sizeof(c)); } } void main() { int i,j;? char a[100],b[100]; ? //用来输入两个大数 gets(a); gets(b); lena=strlen(a); lenb=strlen(b); for(i=0;a[i]!='';i++) a1[i] = a[strlen(a)-i-1] - 48; ? //将字符串大数转换成整形 for(i=0;b[i]!='';i++) b1[i] = b[strlen(b)-i-1]-48; cheng(); ? //大数相乘 output();? }

(编辑:李大同)

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

    推荐文章
      热点阅读