class Solution { public: string addBinary(string a, string b) { string result; //i,j为索引 int i=a.size()-1; int j=b.size()-1; //carry为进位端 //aabb为ab中的一位 int aa,bb,rem,carry=0; while((i>=0)||(j>=0))//以i,j中最大的数字即ab最大长度为基准 进行运算 { //从最低位开始处理并转化为数字 //如果超出为0 aa = i < 0 ? 0 : a[i] - '0'; bb = j < 0 ? 0 : b[j] - '0'; //rem余数 carry进位 rem = (aa + bb + carry)%2; carry = (aa + bb + carry)/2; //+‘0’把数字转化为字符 result.push_back(rem + '0'); i--; j--; } if(carry) result=result+'1'; //result是按照逆序存储的,需要翻转过来 reverse(result.begin(), result.end()); return result; } };