题目链接:P1601 A+B Problem(高精) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
高精度加法,相当于 a+b problem,不用考虑负数。
输入格式
分两行输入。a,b <= 10^500。
输出格式
输出只有一行,代表 a+b 的值。
样例 #1
样例输入 #1
1
1
样例输出 #1
2
样例 #2
样例输入 #2
1001
9099
样例输出 #2
10100
AC code 1:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string f(string a,string b)
{
if(a=="0" && b=="0")
{
return "0";
}
int t1=a.size();
int t2=b.size();
int n=abs(t1-t2);
for(int i=0;i<n;i++)
{
if(t1>=t2)
b="0"+b;
else
a="0"+a;
}
string s; // 和
int c=0; // 进位
int d=0; // 低位
int len=a.size()-1;
for(int i=len;i>=0;i--)
{
d=(a[i]-'0'+b[i]-'0')%10+c;
if(d==10)
{
c=1;
s="0"+s;
continue;
}
s=to_string(d)+s;
c=(a[i]-'0'+b[i]-'0')/10;
if(c==1 && i==0)
s="1"+s;
}
if(s[0]=='0')
s="1"+s;
return s;
}
int main()
{
string a,b;
cin>>a>>b;
cout<<f(a,b);
return 0;
}
AC code 2:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int main()
{
string a,b,res;
cin>>a>>b;
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int c = 0; // 进位
int i = 0 , j = 0;
while(i < a.size() || j < b.size())
{
int num1 = i < a.size() ? a[i ++] - '0' : 0;
int num2 = j < b.size() ? b[j ++] - '0' : 0;
int sum = num1 + num2 + c;
res += ('0' + sum % 10); // 数字转字符
c = sum / 10; // 进位
}
if(c == 1)
res += '1';
reverse(res.begin(),res.end());
cout<<res;
return 0;
}