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

大数乘法(错于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;
}
?

(编辑:李大同)

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

    推荐文章
      热点阅读