And the lengthiest answer award goes to


#1

string Solution::addBinary(string A, string B) {
string ans="";
string carry=“0”;
int n=A.length();
int m=B.length();
if(n>m){
for(int i=0;i<m;i++){
if(carry==“0”){
if(A[n-1-i]==‘0’&&B[m-1-i]==‘0’){
ans.append(“0”);
carry=“0”;
}
else if((A[n-1-i]==‘0’&&B[m-1-i]==‘1’)||(A[n-1-i]==‘1’&&B[m-1-i]==‘0’)){
ans.append(“1”);
carry=“0”;
}
else if(A[n-1-i]==‘1’&&B[m-1-i]==‘1’){
ans.append(“0”);
carry=“1”;
}
}
else if(carry==“1”){
if(A[n-1-i]==‘0’&&B[m-1-i]==‘0’){
ans.append(“1”);
carry=“0”;
}
else if((A[n-1-i]==‘0’&&B[m-1-i]==‘1’)||(A[n-1-i]==‘1’&&B[m-1-i]==‘0’)){
ans.append(“0”);
carry=“1”;
}
else if(A[n-1-i]==‘1’&&B[m-1-i]==‘1’){
ans.append(“1”);
carry=“1”;
}
}

 }
 for(int i=m;i<n;i++){
     if(carry=="0"){
         if(A[n-1-i]=='0'){
             ans.append("0");
           carry="0";
         }
         else if(A[n-1-i]=='1'){
             ans.append("1");
           carry="0";
         }
     }
     else if(carry=="1"){
         if(A[n-1-i]=='0'){
             ans.append("1");
           carry="0";
         }
         else if(A[n-1-i]=='1'){
             ans.append("0");
           carry="1";
         }
     }
 }
 if(carry=="1"){
     ans.append("1");
 }

}
else if(n<m){
for(int i=0;i<n;i++){
if(carry==“0”){
if(A[n-1-i]==‘0’&&B[m-1-i]==‘0’){
ans.append(“0”);
carry=“0”;
}
else if((A[n-1-i]==‘0’&&B[m-1-i]==‘1’)||(A[n-1-i]==‘1’&&B[m-1-i]==‘0’)){
ans.append(“1”);
carry=“0”;
}
else if(A[n-1-i]==‘1’&&B[m-1-i]==‘1’){
ans.append(“0”);
carry=“1”;
}
}
else if(carry==“1”){
if(A[n-1-i]==‘0’&&B[m-1-i]==‘0’){
ans.append(“1”);
carry=“0”;
}
else if((A[n-1-i]==‘0’&&B[m-1-i]==‘1’)||(A[n-1-i]==‘1’&&B[m-1-i]==‘0’)){
ans.append(“0”);
carry=“1”;
}
else if(A[n-1-i]==‘1’&&B[m-1-i]==‘1’){
ans.append(“1”);
carry=“1”;
}
}

 }
 for(int i=n;i<m;i++){
     if(carry=="0"){
         if(B[m-i-1]=='0'){
             ans.append("0");
           carry="0";
         }
         else if(B[m-1-i]=='1'){
             ans.append("1");
           carry="0";
         }
     }
     else if(carry=="1"){
         if(B[m-1-i]=='0'){
             ans.append("1");
           carry="0";
         }
         else if(B[m-1-i]=='1'){
             ans.append("0");
           carry="1";
         }
     }
 }
 if(carry=="1"){
     ans.append("1");
 }

}
else{
for(int i=0;i<n;i++){
if(carry==“0”){
if(A[n-1-i]==‘0’&&B[m-1-i]==‘0’){
ans.append(“0”);
carry=“0”;
}
else if((A[n-1-i]==‘0’&&B[m-1-i]==‘1’)||(A[n-1-i]==‘1’&&B[m-1-i]==‘0’)){
ans.append(“1”);
carry=“0”;
}
if(A[n-1-i]==‘1’&&B[m-1-i]==‘1’){
ans.append(“0”);
carry=“1”;
}
}
else if(carry==“1”){
if(A[n-1-i]==‘0’&&B[m-1-i]==‘0’){
ans.append(“1”);
carry=“0”;
}
else if((A[n-1-i]==‘0’&&B[m-1-i]==‘1’)||(A[n-1-i]==‘1’&&B[m-1-i]==‘0’)){
ans.append(“0”);
carry=“1”;
}
else if(A[n-1-i]==‘1’&&B[m-1-i]==‘1’){
ans.append(“1”);
carry=“1”;
}
}

 }
 if(carry=="1"){
     ans.append("1");
 }

}
reverse(ans.begin(), ans.end());
return ans;

}