给出2个二进制字符串,计算它们的和。例如"111"+"1"="1000"
思路:这道题比较简单,只需要将比较短的字符串高位扩充为0,然后模拟十进制相加即可。
class Solution { public: string addBinary(string a, string b) { string sum; int i; string s1=""; string s2=""; int len1 = a.length(), len2 = b.length(); int len = (len1 >= len2 ? len1 : len2); if (len1 < len2) { string tmp = a; a = b; b = tmp; len1 ^= len2; len2 ^= len1; len1 ^= len2; } s1 = a; sum.resize(len); for(i=0; i<len-len2; i++) { s2 += "0"; } for(i=0; i<len2; i++) { s2 += b.substr(i,1); } int flag = 0; for(i=len-1; i>=0; i--) { if ((s2[i] - '0' + s1[i] - '0' + flag) % 2 == 0) { sum[i] = '0'; } else { sum[i] = '1'; } flag = (s2[i] - '0' + s1[i] - '0' + flag) / 2; } if (flag == 1) { a = "1"; a += sum; return a; } return sum; } };