题目描述
请设计一个算法完成两个超长正整数的加法。
请设计一个算法完成两个超长正整数的加法。
输入参数:
String addend:加数
String augend:被加数
返回值:加法结果
虽然Java有BigInteger能够方便的处理大数,但了解一下大数相加的实现方法,并用C/C++来实现,对能力的提升有很大的帮助。
输入为两个字符串,那么从两个字符串串尾分别对每两个字符进行模拟加法的运算,用一个空字符串存储每次运算的结果后,最后得到字符串就是加法结果。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string AddString(string a,string b)
{
string res="";//存储结果的空字符串
int carry=0;//两个字符相加后的进位
int i=a.length()-1,j=b.length()-1;
while(i>=0 || j>=0)//从字符串末尾开始做模拟相加运算
{
int temp=0;
if(i>=0 && j>=0)//两个字符串都不为空时
{
temp=a[i]-'0'+b[j]-'0'+carry;
i--;
j--;
}
else if(i>=0)//第二个字符串已经为空
{
temp=a[i]-'0'+carry;
i--;
}
else//第一个字符串为空
{
temp=b[j]-'0'+carry;
j--;
}
res+=to_string(temp%10);
carry=temp/10;
}
if(carry)//运算后处理最后进位
{
res+=to_string(carry);
}
reverse(res.begin(),res.end());//将字符串反转才能得到正确结果
return res;
}
int main()
{
string addend,augend;
while(cin>>addend>>augend)
{
cout<<AddString(addend,augend)<<endl;
}
return 0;
}