给定两个非负整数a和b,计算a+b的结果。
注:不能使用语言特有的大整数类型将输入直接转换为整数来求解。
解题思路:
利用字符串类型,获取每一位上的数字进行运算,如果大于9,则发生进位,用一个flag状态来保存。
需要注意的是,两个数字的位数可能差异很大。这时候需要对两个字符串对齐,即补零操作。
并且要从数的末尾去进行相加,然后进位。
我们可以正着补零,然后从个位开始相加。代码如下:
int main(){
string s1,s2;
cin>>s1>>s2;
//位数不同前置补0
while(s1.length()<s2.length()){
s1.insert(0,"0");
}
while(s2.length()<s1.length()){
s2.insert(0,"0");
}
int flag = 0;
for(int i=s1.length()-1;i>=0;i--){
int temp = s1[i]-'0'+s2[i]-'0'+flag;
if(temp>9){
flag = 1;
temp = temp%10;
s1[i] = temp + '0';
}
else{
s1[i] = temp + '0';
flag = 0;
}
}
if(flag){
s1.insert(0,"1");
}
cout<<s1<<endl;
return 0;
}
也可以先逆序相加。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string c;
string s1,s2;
cin>>s1>>s2;
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
int flag = 0;
int i;
for(i=0;i<s1.length()||i<s2.length();i++){
int tempa,tempb;
if(i<s1.length()){
tempa = s1[i]-'0';
}
else{
tempa = 0;
}
if(i<s2.length()){
tempb = s2[i]-'0';
}
else{
tempb = 0;
}
int tempsum = tempa+tempb+flag;
if(tempsum>9){
flag = 1;
tempsum%=10;
c += tempsum+'0';
}
else{
c += tempsum+'0';
flag = 0;
}
}
if(flag){
c += "1";
}
reverse(c.begin(),c.end());
cout<<c<<endl;
return 0;
}