请设计一个算法完成两个超长正整数的加法。
输入两个字符串数字
输出相加后的结果,string型
样例输入:999999999999999999999999999999999999999999999999991
样例输出:100000000000000000000000000000000000000000000000000
#include<iostream>
#include<string>
using namespace std;
string add(string num1,string num2);
int main()
{
string add1,add2,anser;
cin>>add1;
cin>>add2;
anser=add(add1,add2);
cout<<anser<<flush;
return 0;
}
string add(string add1,string add2)
{
int MaxLen,jia1,jia2,jia,tenbit=0;
char temp;
string::iterator iter;
string::reverse_iterator iter1,iter2;
if(add1.size()>=add2.size())
{
MaxLen=add1.size();
iter=add2.begin();
add2.insert(iter,MaxLen-add2.size(),'0');
}
else
{
MaxLen=add2.size();
iter=add1.begin();
add1.insert(iter,MaxLen-add1.size(),'0');
}
for(iter1=add1.rbegin(),iter2=add2.rbegin();iter1!=add1.rend(),iter2!=add2.rend();++iter1,++iter2)
{
if(iter1==add1.rend()-1 && iter2==add2.rend()-1)//处理最高位相加
{
jia1=*iter1-'0';
jia2=*iter2-'0';
jia=(jia1+jia2+tenbit)%10;
tenbit=(jia1+jia2+tenbit)/10;
*iter1=jia+'0';
if(tenbit>0)//若最高位有进位,向前产生数字1
add1.insert(add1.begin(),'1');
}
else
{
jia1=*iter1-'0';
jia2=*iter2-'0';
jia=(jia1+jia2+tenbit)%10;
tenbit=(jia1+jia2+tenbit)/10;
*iter1=jia+'0';
}
}
return add1;
}