求两个不超过 200 位的非负整数的和。
输入格式
有两行,每行是一个不超过 200 位的非负整数,可能有多余的前导 0。
输出格式
一行,即相加后的结果。结果里不能有多余的前导 0,即如果结果是 342,那么就不能输出为 0342。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
一开始想的就是拆分一位一位相加然后进位存放在一个数组里,最后倒序输出。但是因为前导0处理不好,就出错了。后来想起老师讲过,可以令一个进位值来控制循环,以及控制最高位的有无。坑点在于不能输出前几个0,设置一个标记变量flag解决了。
#include <iostream>
#include <cstring>
using namespace std;
int main(){
string s1,s2;
cin>>s1>>s2;
int i,d=0;
int s3[210];
int a,b;
for(i=0;i<s1.length()||i<s2.length();i++){
if(i>=s1.length()) a=0;
else a=s1[s1.length()-1-i]-(int)'0';
if(i>=s2.length()) b=0;
else b=s2[s2.length()-1-i]-(int)'0';
int c=a+b+d;
if(c>=10) d=1;
else d=0;
s3[i]=c%10;
}
if(d==1){
s3[i]=1;
i++;
}
bool flag=0;
for(int j=i-1;j>=0;j--){
if(s3[j]!=0||flag){
flag=1;
cout<<s3[j];
}
}
if(!flag) cout<<0;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)