class Solution {
public:
string addBinary(string a, string b) {
string res="";
int flag = 0;
if (a.length() < b.length()) swap(a, b);
for (int i = 0; i < b.length(); ++i) {
int ib = b.length()-1 - i;
int ia = a.length()-1 - i;
string tmp;
switch (a[ia] - '0' + b[ib] - '0' + flag)
{
case 0: {
tmp = "0";
flag = 0;
break;
}
case 1: {
tmp = "1";
flag = 0;
break;
}
case 2: {
tmp = "0";
flag = 1;
break;
}
case 3: {
tmp = "1";
flag = 1;
break;
}
}
res = tmp + res;
}
int ia = a.length()-1 - b.length();
while (flag == 1) {
if (ia < 0) {
res = "1" + res;
break;
}
switch (a[ia] - '0' + flag)
{
case 1: {
res = "1" + res;
flag = 0;
break;
}
case 2: {
res = "0" + res;
flag = 1;
break;
}
}
ia--;
}
if (ia >= 0) {
res = a.substr(0, ia + 1) + res;
}
return res;
}
};