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

大数乘法

发布时间:2020-12-14 02:59:17 所属栏目:大数据 来源:网络整理
导读:描述 求两个不超过200位的非负整数的积。 输入 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入 12345678900 4576098765432100 638556
描述

求两个不超过200位的非负整数的积。

输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900                 45760
98765432100                 6385561
样例输出

1219326311126352690000 ? ? ?292203271360

#include<stdio.h>
#include<string.h>
int main()
{
	char a[1000],b[1000];
	int s[10010],i;
	int l1,l2,j;
	while(scanf("%s",a)!=EOF)
	{
		scanf("%s",&b);
		if(strcmp(a,"0")==0 || strcmp(b,"0")==0)
			printf("0n");//当两个数中,有一个是0就直接输出0;
		else
		{
        l1=strlen(a);
		l2=strlen(b);
        for(i=0;i<l1+l2;i++)
            s[i]=0;
		for(i=0;i<l1;i++)
		{
			for(j=0;j<l2;j++)
				s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
		}
		for(i=l1+l2-1;i>=0;i--)
		{
			if(s[i]>=10)
			{
			    s[i-1]+=s[i]/10;
			    s[i]=s[i]%10;
			}
		}
		int t=0;
		for(i=0;i<l1+l2;i++)
		{
			if(t==0 && s[i]==0)
			{
				t++;
				continue;
			}
			t++;//处理前导0;
			printf("%d",s[i]);
		}
		printf("n");
		}
	}
	return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读