大整数加法 奥赛一本通T1168

【题目描述】

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

【输入】

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

【输出】

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

【输入样例】

22222222222222222222
33333333333333333333

【输出样例】

55555555555555555555

用字符串模拟两个整数相加的过程,注意进位问题。

#include<iostream>
using namespace std;
string m,n;
int end[500]={0};
void isum()
{
	int last=0;
	int now1=n.length()-1;
	int now2=m.length()-1;
	for(int i=0;i<m.length();i++)
	{
		end[i]=(n[now1-i]+m[now2-i]+last-'0'-'0')%10;
		last=(n[now1-i]+m[now2-i]+last-'0'-'0')/10;
	}
	for(int i=m.length();i<n.length();i++)
	{
		end[i]=(last+n[now1-i]-'0')%10;
		last=(n[now1-i]+last-'0')/10;
	}
	end[n.length()]=last;
}
int main()
{
	cin>>n>>m;
	string ex;
	if(n.length()<m.length())
	{
		ex=n;
		n=m;
		m=ex;
	}
	isum();
	int i=499;
	while(end[i]==0)
	i--;
	while(i>=0)
	{
		cout<<end[i];
		i--;
	}
	cout<<endl;
	return 0;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页