大数乘法(错于2*LEN-1)
发布时间:2020-12-14 03:07:09 所属栏目:大数据 来源:网络整理
导读:大数乘法: 求两个不超过200 位的非负整数的积。 输入数据有两行,每行是一个不超过200 位的非负整数,没有多余的前导0。 输出要求一行,即相乘后的结果。结果里 span style="color:#006600;"不能有多余的前导0,即如果结果是342,那么就不能输出为0342。/sp
大数乘法:
求两个不超过200 位的非负整数的积。
输入数据有两行,每行是一个不超过200 位的非负整数,没有多余的前导0。
输出要求一行,即相乘后的结果。结果里
<span style="color:#006600;">不能有多余的前导0,即如果结果是342,那么就不能输出为0342。</span>#include<stdio.h> #include<string.h> #define LEN 220 char arr[LEN],brr[LEN]; int crr[LEN],drr[LEN],err[LEN*2]; int main() { while(1) { int i,j,l,k; memset(crr,sizeof(crr)); memset(drr,sizeof(drr)); memset(err,sizeof(LEN*2)); gets(arr); gets(brr); l=strlen(arr); k=strlen(brr); for(i=0,j=l-1;i<l;i++,j--) crr[j]=arr[i]-'0'; for(i=0,j=k-1;i<k;i++,j--) drr[j]=brr[i]-'0'; <span style="color:#cc0000;"> //for(i=0;i<3;i++) //printf("%d %d",crr[i],drr[i]); </span> for(i=0;i<l;i++) for(j=0;j<k;j++) err[i+j]+=crr[i]*drr[j]; for(i=0;i<LEN*2;i++) if(err[i]>=10) { err[i+1]+=err[i]/10; err[i]=err[i]%10; } <span style="color:#cc0000;">// for(i=0;i<5;i++)12 // printf("-%d ",err[i]); // for(j=2*LEN;err[j]==0&&j>=0;j--);</span><span style="color:#ff0000;"><span style="color:#ff0000;">2*LEN </span>未减 1,导致取值到数组外 </span> for(j=2*LEN-1;err[j]==0&&j>=0;j--); if(j>=0) for(;j>=0;j--) printf("%d",err[j]); else printf("0"); printf("n"); } return 0; }? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |