Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
--- this is a problem on leetcode
https://oj.leetcode.com/problems/add-binary/
#include <iostream>
using namespace std;
class Solution
{
public:
string addBinary(string a, string b)
{
int i = 0;
int maxLen;
int a_size = a.size();
int b_size = b.size();
if (a_size >= b_size)
{
maxLen = a_size;
string tab0(a_size - b_size, '0');
b = tab0 + b;
}
else
{
maxLen = b_size;
string tab0(b_size - a_size, '0');
a = tab0 + a;
}
string tmp(maxLen + 1, '0'); //carry-bit
string addStr(maxLen, '0'); //result
tmp[maxLen] = '0'; //lowest-carry-bit is always 0
for (i = maxLen - 1; i >= 0; i--)
{
if (a[i] == b[i])
{
addStr[i] = (tmp[i + 1] == '0')? '0' : '1';
tmp[i] = (a[i] == '1')? '1' : '0';
}
else
{
if (tmp[i + 1] == '0')
{
tmp[i] = '0';
addStr[i] = '1';
}
else
{
tmp[i] = '1';
addStr[i] = '0';
}
}
}
if (tmp[0] != '0')
{
addStr = '1' + addStr;
}
cout << addStr << endl;
return addStr;
}
};
int main()
{
Solution slt;
slt.addBinary("1111", "10");
slt.addBinary("100101", "10");
system("pause");
}