P1601 高精度加法(洛谷题面)
题目
题目描述:
给定两个非负整数 a,b,求它们的和。不用考虑负数。
输入格式:
输入共两行,每行一个非负整数,分别为 a,b。
输出格式:
输出一行一个非负整数,表示 a+b 的值。
数据范围与说明:
对于 20% 的测试数据,a,b≤109;
对于 40% 的测试数据,a,b≤1018;
对于 100% 的测试数据,0≤a,b≤10500。
输入输出样例 #1
输入:
输出:
输入输出样例 #2
输入:
输出:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<bits/stdc++.h> using namespace std; string a,b,result=""; string add(string a,string b){ if(a.size()<b.size()){ swap(a,b); } int len_a=a.size(); int len_b=b.size(); int diff=len_a-len_b; int carry=0; for(int i=a.size()-1;i>=0;i--){ int digit1=a[i]-'0'; int digit2=(i>=diff)?(b[i-diff]-'0'):0; int sum=digit1+digit2+carry; carry=sum/10; result.push_back(sum%10+'0'); } if(carry){ result.push_back(carry+'0'); } reverse(result.begin(),result.end()); return result; } int main(){ cin>>a; cin>>b; string num=add(a,b); cout<<num; return 0; }
|