Add Binary
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
思路:逐位相加,进位保留在和的下一位中。
C++实现代码:
#include<iostream> #include<string> #include<vector> using namespace std; class Solution { public: string addBinary(string a, string b) { int size1=a.size()-1; int size2=b.size()-1; int size=max(size1,size2); string digits(size+1,'0'); while(size1>=0&&size2>=0) { if((a[size1]=='1')&&(b[size2]=='1')) { digits[size-1]='1'; if(size1==0&&size2==0) digits.insert(digits.begin(),'1'); size1--; size2--; size--; } else if(((a[size1]=='1')||(b[size2]=='1'))&&(digits[size]=='0')) { digits[size]='1'; size1--; size2--; size--; } else if(((a[size1]=='1')||(b[size2]=='1'))&&(digits[size]=='1')) { digits[size]='0'; digits[size-1]='1'; if(size1==0&&size2==0) digits.insert(digits.begin(),'1'); size1--; size2--; size--; } else { digits[size]=digits[size]; size1--; size2--; size--; } } cout<<digits<<endl; if(size1>=0) { while(size1>=0&&size>=0) { if((digits[size]=='1')&&(a[size1]=='1')) { digits[size]='0'; digits[size-1]='1'; if(size==0) digits.insert(digits.begin(),'1'); size1--; size--; } else if((digits[size]=='1')&&(a[size1]=='0')) { size1--; size--; } else { digits[size]=a[size1]; size--; size1--; } } } if(size2>=0) { while(size2>=0&&size>=0) { if((digits[size]=='1')&&(b[size2]=='1')) { digits[size]='0'; digits[size-1]='1'; //最前面两个数相加需要进位的时候,在前面插入1 if(size==0) digits.insert(digits.begin(),'1'); size2--; size--; } else if((digits[size]=='1')&&(b[size2]=='0')) { size2--; size--; } else { digits[size]=b[size2]; size--; size2--; } } } return digits; } }; int main() { string b="100"; string a="110010"; Solution s; cout<<"digits: "<<s.addBinary(a,b)<<endl; }
只能想到这么麻烦的方法,哎。。。
string addBinary(string a, string b) { if(a.empty()) return b; if(b.empty()) return a; int carry=0; int i=a.size()-1; int j=b.size()-1; string res; int sum=0; while(i>=0&&j>=0) { sum=a[i--]-'0'+b[j--]-'0'+carry; if(sum>=2) { char c=sum%2+'0'; res=c+res; carry=1; } else { char c=sum+'0'; res=c+res; carry=0; } } while(i>=0) { sum=carry+a[i--]-'0'; if(sum>=2) { char c=sum%2+'0'; res=c+res; carry=sum/2; } else { char c=sum+'0'; res=c+res; carry=0; } } while(j>=0) { sum=carry+b[j--]-'0'; if(sum>=2) { char c=sum%2+'0'; res=c+res; carry=sum/2; } else { char c=sum+'0'; res=c+res; carry=0; } } if(carry==1) res.insert(0,"1"); return res; }