题目描述
今天老师在课堂上讲了加法,并布置了课堂作业,贪玩的达子没有好好听课,你能帮他完成今天的作业吗。
输入
有多组测试样例。
输入的第一行是一个整数T,代表测试样例的个数,T不大于1000。
每组测试样例给出两个整数a和b,以换行符分割,请你帮达子算出“a+b”的结果,其中0<=a, b<=10100。
输出
每组测试样例有一行输出,代表a+b的结果。
样例输入
2 5 6 386198 858797
样例输出
11 1244995
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1,s2;
int n,i,x,t,l1,l2;
cin>>n;
while(n--){
cin>>s1>>s2;
l1=s1.length()-1;
l2=s2.length()-1;
string r;
if(l1<l2){
for(i=1;i<=l2-l1;i++){
s1='0'+s1;
}
}else{
for(i=1;i<=l1-l2;i++){
s2='0'+s2;
}
}
l1=s1.length();
t=0;
for(i=l1-1;i>=0;i--){
x=s1[i]+s2[i]-'0'-'0'+t;
t=x/10;
x%=10;
r=char(x+'0')+r;
}
if(t) r=char(t+'0')+r;
cout<<r<<endl;
}
}
总结:
1.为方便运算,可以先进行字符串长度的比较,将较短的字符串前缀用'0'补全
2.在进行计算时,可以吧进位的数单独记录下来,如代码中的变量t,在计算下一位时一起运算,如代码x=s1[i]+s2[i]-'0'-'0'+t;
3.注意应用字符强转类型如代码r=char(x+'0')+r;