题目
计算两个非负整数 <math> <semantics> <mrow> <mi> A </mi> <mo separator="true"> , </mo> <mi> B </mi> </mrow> <annotation encoding="application/x-tex"> A,B </annotation> </semantics> </math>A,B 的和。
不过这一次有些特殊, <math> <semantics> <mrow> <mi> A </mi> <mo separator="true"> , </mo> <mi> B </mi> </mrow> <annotation encoding="application/x-tex"> A,B </annotation> </semantics> </math>A,B 可能会很大。
输入格式
第一行输入一个非负整数 <math> <semantics> <mrow> <mi> A </mi> </mrow> <annotation encoding="application/x-tex"> A </annotation> </semantics> </math>A。
第二行输入一个非负整数 <math> <semantics> <mrow> <mi> B </mi> </mrow> <annotation encoding="application/x-tex"> B </annotation> </semantics> </math>B。
<math> <semantics> <mrow> <mi> A </mi> <mo separator="true"> , </mo> <mi> B </mi> </mrow> <annotation encoding="application/x-tex"> A,B </annotation> </semantics> </math>A,B 的长度不大于 <math> <semantics> <mrow> <mn> 500 </mn> </mrow> <annotation encoding="application/x-tex"> 500 </annotation> </semantics> </math>500。
输出格式
输出 <math> <semantics> <mrow> <mi> A </mi> <mo> + </mo> <mi> B </mi> </mrow> <annotation encoding="application/x-tex"> A+B </annotation> </semantics> </math>A+B 的值。
不要有多余的前导零。
样例输入
123
1234
样例输出
1357
题解
字符串计算加减乘都是一个套路,转置计算,结果再转置回来
string 放结果
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
string A,B;
string ans;
cin>>A>>B;
reverse(A.begin(),A.end());
reverse(B.begin(),B.end());
int jw = 0; // 进位
int len = min(A.length(),B.length());
for(int i=0;i<len;i++){
ans += (A[i]-'0'+B[i]-'0'+jw)%10+'0';
if(A[i]-'0'+B[i]-'0'+jw >= 10)
jw = 1;
else
jw = 0;
}
if(len < A.length()){
for(int i=len;i<A.length();i++){
ans += (A[i]-'0'+jw)%10+'0';
if(A[i]-'0'+jw >= 10)
jw = 1;
else
jw = 0;
}
}else if(len < B.length()){
for(int i=len;i<B.length();i++){
ans += (B[i]-'0'+jw)%10+'0';
if(B[i]-'0'+jw >= 10)
jw = 1;
else
jw = 0;
}
}
reverse(ans.begin(),ans.end());
cout<<ans;
return 0;
}
char 放结果
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
string A,B;
char ans[500+5];
cin>>A>>B;
reverse(A.begin(),A.end());
reverse(B.begin(),B.end());
int jw = 0; // 进位
int len = max(A.length(),B.length());
for(int i=0;i<len;i++){
ans[i] = jw;
if(i < A.length())
ans[i] += A[i]-'0';
if(i < B.length())
ans[i] += B[i]-'0';
if(ans[i] >= 10)
jw = 1;
else
jw = 0;
ans[i] = ans[i]%10+'0';
}
reverse(ans,ans+len);
ans[len] = '\0';
cout<<ans;
return 0;
}