1.13 09:大整数乘法

  • Post author:
  • Post category:其他


描述

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

输入

有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

输出

一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

样例输入

12345678900

98765432100

样例输出

1219326311126352690000

#include <iostream>
#include <string.h>
using namespace std;
char s1[300], s2[300];
int a[300],b[300],c[600];
int main()
{
	int len1,len2,len;
	cin>>s1>>s2;
	len1 = strlen(s1);
	len2 = strlen(s2);
	for(int i=0;i<len1;i++)
	{
		a[i] = s1[len1-i-1]-'0';
	}
	for(int i=0;i<len2;i++)
	{
		b[i] = s2[len2-i-1]-'0';
	}
	len = len1+len2;//乘积的位数不超过两个乘数长度的和
	for(int i=0;i<len1;i++)
	{
		for(int j=0;j<len2;j++)
		{
			c[i+j] += a[i]*b[j];
			if(c[i+j]>=10)
			{
				c[i+j+1] += c[i+j]/10;
				c[i+j] = c[i+j]%10;
			}
		}
	}
	 
	
	while(len && c[len]==0)
	{
		len--;
	}
	while(len>=0)
	{
		cout<<c[len];
		len--;
	}
	return 0;
} 



版权声明:本文为yansuifeng1126原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。