Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". class Solution { public: string addBinary(string a, string b) { string res; reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); int i = 0, j = 0; int sum = 0, rem = 0, c = 0; while(i < a.size() && j < b.size()) { sum = a[i] - '0' + b[i] - '0' + c; rem = sum % 2; c = sum / 2; res += rem + '0'; i++; j++; } while(i < a.size()) { sum = a[i] - '0' + c; rem = sum % 2; c = sum / 2; res += rem + '0'; i++; } while(j < b.size()) { sum = b[j] - '0' + c; rem = sum % 2; c = sum / 2; res += rem + '0'; j++; } if(c) res += c + '0'; reverse(res.begin(), res.end()); return res; } }; class Solution { public: string addBinary(string a, string b) { string res; int n = a.size() > b.size() ? a.size() : b.size(); reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); int c = 0; for(int i = 0; i < n; i++) { int ai = i < a.size() ? a[i] - '0' : 0; int bi = i < b.size() ? b[i] - '0' : 0; int sum = (ai + bi + c) % 2; c = (ai + bi + c) / 2; res.insert(res.begin(), sum + '0'); } if(c) res.insert(res.begin(), '1'); return res; } };