Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
#include<string>
#include<cstdlib>
#include<iostream>
using namespace std;
class Solution {
public:
string addBinary(string a, string b) {
int n1=a.length(),n2=b.length();
if(n1==0) return b;
if(n2==0) return a;
string res=a;
char flag='0';
int res_len=n1;
if(n1<n2){
res=b;
res_len=n2;
}
int i=n1-1,j=n2-1,k=res_len-1;
while((i>-1)&&(j>-1)){
if((a[i]=='1')&&(b[j]=='1')&&(flag=='0')){
flag='1';
res[k]='0';
}
else if((a[i]=='1')&&(b[j]=='1')&&(flag=='1')){
flag='1';
res[k]='1';
}
else if(((a[i]=='1')||(b[j]=='1'))&&(flag=='0')){
flag='0';
res[k]='1';
}
else if(((a[i]=='1')||(b[j]=='1'))&&(flag=='1')){
flag='1';
res[k]='0';
}
else{
res[k]=flag;
flag='0';
}
--i;
--j;
--k;
}
while(k>-1){
if(flag=='0'){return res;}
else{
if(res[k]=='1'){
res[k]='0';
flag='1';
}
else if(res[k]=='0'){
res[k]='1';
flag='0';
}
}
--k;
}
if(flag=='1'){
res=flag+res;
}
return res;
}
};
void main(){
string a="101111",b="10";
Solution So;
string res=So.addBinary(a,b);
printf("%s \n",res.c_str());
}