Given two binary strings, return their sum (also a binary string).
For example, a = “11” b = “1” Return “100”.
class Solution {
public:
string addBinary(string a, string b) {
auto aIter = a.end() - 1;
auto bIter = b.end() - 1;
string c = ""; //结果
bool carry = false;//进位
while(true){//对应位相加
if(*aIter == *bIter){
if(carry)
c.insert(c.begin(),'1');
else
c.insert(c.begin(),'0');
if(*aIter =='1')
carry = true;
else
carry = false;
}
else{
if(carry)
c.insert(c.begin(),'0');
else
c.insert(c.begin(),'1');
}
if(aIter == a.begin() || bIter == b.begin())
break;
--aIter;
--bIter;
}
//若a,b等长,则不用高位补齐
if((aIter == a.begin()) && (bIter == b.begin())){
if(carry)
c.insert(c.begin(),'1');
return c;
}
//高位补齐
auto remE = (aIter == a.begin())? bIter:aIter;
auto remB = (aIter == a.begin())? (b.begin()):(a.begin());
while(carry){
--remE;
if(*remE == '1')
c.insert(c.begin(),'0');
else{
c.insert(c.begin(),'1');
carry = false;
}
if(remE == remB)
break;
}
if(remE == remB){
if(carry)
c.insert(c.begin(),'1');
}
else
c.insert(c.begin(),remB,remE);
return c;
}
};