高精度算法
题目描述
高精度加法,相当于a+b problem,不用考虑负数.
输入格式
分两行输入。a,b<=10^{500}a,b<=10
500
输出格式
输出只有一行,代表a+b的值
输入 #1
1
1
输出
2
说难不难,就是数字太长,导致编译器自带的+ - * /只对int long有效,而超限就会乱码。这时候引入string,算法思路和笔算一样,从最后一个开始加并且进位
这时候需要将2个string类进行比较,短的后面加0补齐,然后反转相加,再反转输出即可,代码如下:
using namespace std;
int main()
{
string s1,s2,s3; //举例 s1为99 s2为111
cin>>s1;
cin>>s2;
int len; //例为3
len=max(s1.length(),s2.length()); //较长的长度
reverse(s1.begin(),s1.end()); //反转s1
reverse(s2.begin(),s2.end()); //反转s2
for(int i=s1.length();i<len;i++)
{
s1+='0';
} //s1变为990
for(int i=s2.length();i<len;i++)
{
s2+='0';
} //s2 111
int a=0; //定义a为进位数 如7+8进1 a=1
for(int i=0;i<len;i++)
{
int k;
k=a+(s1[i]-'0')+(s2[i]-'0'); //加进位求和
s3+=(k%10)+'0'; //对10取余
a=k/10; //进位
}
if(a) //若最后a不位0 直接最高位为a 例如99+111=1010
s3+=a+'0';
reverse(s3.begin(),s3.end()); //反转即可
cout<<s3;
}