给定两个二进制字符串,返回他们的和(用二进制表示)
a = 11
b = 1
返回 100
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
/**
* @param a a number
* @param b a number
* @return the result
*/
string addBinary(string& a, string& b) {
// Write your code here
int aLength = a.size()- 1;
int bLength = b.size()- 1;
int c=0;
int i,j,sum=0;
string result= "";
if(aLength >= bLength){
for( i = 0; i <= bLength; i++){
int digb = (b[bLength-i]-'0')%2;
int diga = (a[aLength-i]-'0')%2;
int sum = diga + digb + c;
if(sum > 1 ){
c = 1;
sum= sum % 2;
}
else{
c=0;
sum= sum % 2;
}
if(sum==0)
result = "0" + result;
else
result = "1" + result;
}
for( j = bLength+1; j<= aLength;j++){
int diga = (a[aLength-j]-'0')%2;
sum = diga + c;
if(sum > 1 ){
c = 1;
sum= sum % 2;
}
else{
c=0;
sum= sum % 2;
}
if(sum==0)
result = "0" + result;
else
result = "1" + result;
}
if(c==1)
result = "1" + result;
}
else
{
for( i = 0; i <= aLength; i++){
int digb = (b[bLength-i]-'0')%2;
int diga = (a[aLength-i]-'0')%2;
int sum = diga + digb + c;
if(sum > 1 ){
c = 1;
sum= sum % 2;
}
else{
c=0;
sum= sum % 2;
}
if(sum==0)
result = "0" + result;
else
result = "1" + result;
}
for( j = aLength+1; j<= bLength;j++){
int digb = (b[bLength-j]-'0')%2;
sum = digb + c;
if(sum > 1 ){
c = 1;
sum= sum % 2;
}
else{
c=0;
sum= sum % 2;
}
if(sum==0)
result = "0" + result;
else
result = "1" + result;
}
if(c==1)
result = "1" + result;
}
return result;
}
};
int main()
{
string s1 = "1111";
string s2 = "1111";
Solution st;
cout << st.addBinary(s1, s2);
return 0;
}