class Solution {
public:
string addBinary(string a, string b) {
string s = "";
int an, bn, carry, p, q, sum;
an = a.size() - 1;
bn = b.size() - 1;
stack <int>s1;
carry = 0;
while (an >= 0 && bn >= 0)
{
p = a[an--] - '0';
q = b[bn--] - '0';
sum = p + q+carry;
if (sum / 2)
carry = 1;
else
carry = 0;
s1.push(sum % 2);
}
while (an >= 0)
{
p = a[an--] - '0';
sum = p + carry;
if (sum / 2)
carry = 1;
else
carry = 0;
s1.push(sum % 2);
}
while (bn >= 0)
{
q = b[bn--] - '0';
sum = q + carry;
if (sum / 2)
carry = 1;
else
carry = 0;
s1.push(sum % 2);
}
if (carry)
{
s1.push(carry);
}
char t;
while (s1.size())
{
t = s1.top() + '0';
s1.pop();
s += t;
}
return s;
}
};