超长正整数相加-牛客

请设计一个算法完成两个超长正整数的加法。

接口说明

/*
请设计一个算法完成两个超长正整数的加法。
输入参数:
String addend:加数
String augend:被加数
返回值:加法结果
*/

public String AddLongInteger(String addend, String augend)
{
/在这里实现功能/

return null;
}

话不多说,直接上代码

#include<iostream>
#include<vector>
#include<string>

using namespace std;

//超长正整数相加

string AddLongInteger(string addend, string augend)
{
	int size1 = addend.size();//拿到两个字符串的长度
	int size2 = augend.size();

	int size = size1 > size2 ? size1 : size2;//取较大值

	vector<int> add1(size);//开辟两个整型数组,大小按最大值,可以避免后面访问时的越界问题
	vector<int> add2(size);

	//将两组字符串反向存入数组,为了方便做加法时从最低位开始
	for (int i = 0; i < size1; i++)
	{
		add1[i] = addend[size1 - i - 1] - '0';
	}
	for (int i = 0; i < size2; i++)
	{
		add2[i] = augend[size2 - i - 1] - '0';
	}

	//开辟一个新数组用来存放两数的和
	vector<int> add(size + 1, 0);
	int i;
	for (i = 0; i < size; i++)
	{
		add[i] += add1[i] + add2[i];
		if (add[i] > 9)
		{
			add[i + 1] = add[i] / 10;
			add[i] %= 10;
		}
	}
	
	//将结果插入输出字符串
	string end;
	for (i = 0; i < size; i++)
	{
		end.push_back(add[size - i - 1] + '0');//反向插入
	}

	return end;
}

int main()
{
	string add;
	string aug;

	while (cin >> add >> aug){
		cout << AddLongInteger(add, aug) << endl;
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/Mmonster23/article/details/106861624
今日推荐