ADV-121.高精度加法
【问题描述】
在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。
现在输入两个整数,请输出它们的和。
【输入格式】
两行,每行一个整数,每个整数不超过1000位
【输出格式】
一行,两个整数的和。
【样例输入】
15464315464465
465482321654151
【样例输出】
15464797786119616
#include <iostream>
using namespace std;
string add(string s1,string s2){
int len1=s1.length(),len2=s2.length();
if(len1<len2){ //如果第一个字符串的长度小于第二个
string t(len2-len1,'0');
s1=t+s1; //将第二个字符串从前到后填上0,使得其长度和第一个相等
}else if(len2<len1){
string t(len1-len2,'0');
s2=t+s2;
}
string ans=s1; //ans串存结果
int car=0; //存放进位
for(int i=s1.length()-1;i>=0;--i){ //从个位开始模拟加法
ans[i]=(s1[i]-'0'+s2[i]-'0'+car)%10+'0';
car=(s1[i]-'0'+s2[i]-'0'+car)/10; //计算进位
}
if(car)
ans=(char)(car+'0')+ans; //计算到最后的话,如果有进位,要加上进位
return ans;
}
int main(){
string s1,s2;
cin>>s1>>s2;
cout<<add(s1,s2);
return 0;
}