请设计一个算法完成两个超长正整数的加法。
接口说明
/*
请设计一个算法完成两个超长正整数的加法。
输入参数:
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;
}