题目大意:给出二个二进制字符串,将其结果相加求和。
算法思想:
1.为方便计算,将两个字符串逆序。
2.设置进制位用于记录字符串各位相加的进位,初始化为0.
3.将两个字符串的各位逐位相加。
4.若两字符串长度不等,则将长字符串的剩余部分加起来。
5.若有进位,则将进位加入结果中。
6.将结果逆序并返回。
代码如下:
class Solution {
public:
string addBinary(string a, string b) {
if(a.length()==0) return b;
if(b.length()==0) return a;
string res("");
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int d=0,tmp=0,i;
int size=min(a.size(),b.size());
for(i=0;i<size;++i){
tmp=(a[i]-'0')+(b[i]-'0')+d;
res+=(tmp%2+'0');
d=tmp/2;
}
if(i<a.size()){
while(i<a.size()){
tmp=(a[i]-'0')+d;
res+=(tmp%2+'0');
d=tmp/2;
++i;
}
}
if(i<b.size()){
while(i<b.size()){
tmp=(b[i]-'0')+d;
res+=(tmp%2+'0');
d=tmp/2;
++i;
}
}
if(d){
res+=(d+'0');
}
reverse(res.begin(),res.end());
return res;
}
};