13
2019
04

信息学一本通:1174:大整数乘法

【题目描述】

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

【输入】

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

【输出】

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

【输入样例】

12345678900
98765432100

【输出样例】

1219326311126352690000




#include<bits/stdc++.h>
using namespace std;
int main(){
	string str1,str2;
	int a[333]={0},b[333]={0},c[333]={0};
	cin>>str1;
	cin>>str2;
	int lena=str1.length();
	int lenb=str2.length();
	
	for(int i=0;i<=lena-1;++i)
	a[lena-i]=str1[i]-'0';
	for(int i=0;i<=lenb-1;++i)
	b[lenb-i]=str2[i]-'0';
	
	//每一位两两相乘,结果存入第i+j-1这个位置,乘法本质上是加法运算,每次要加上上次的进位,
	for(int i=1;i<=lena;++i){
		int x=0;
		for(int j=1;j<=lenb;++j){
			c[i+j-1]=c[i+j-1]+a[j]*b[i]+x;
			x=c[i+j-1]/10;	
			c[i+j-1]%=10;
		}
		c[i+lenb]=x;  //最后一位有进位
	}
	int lenc=lena+lenb;
	while((c[lenc]==0)&&(lenc>1))
	lenc--;
	for(int i=lenc;i>0;i--)
	cout<<c[i];
	cout<<endl;
	return 0;
}


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。