大数乘法(错于2*LEN-1)

来源:互联网 发布:下载动画的软件 编辑:程序博客网 时间:2024/06/06 04:56
大数乘法:
求两个不超过200 位的非负整数的积。
输入数据有两行,每行是一个不超过200 位的非负整数,没有多余的前导0。
输出要求一行,即相乘后的结果。结果里
<span style="color:#006600;">不能有多余的前导0,即如果结果是342,那么就不能输出为0342。</span>#include<stdio.h>
#include<string.h>#define LEN 220char arr[LEN],brr[LEN];int crr[LEN],drr[LEN],err[LEN*2];int main(){    while(1)     {        int i,j,l,k;                  memset(crr,0,sizeof(crr));         memset(drr,0,sizeof(drr));memset(err,0,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]);elseprintf("0");printf("\n");    }return 0;}

 
0 0