二进制相加,本质上就是大整数加法,有关大整数加法我的舍友教过我一个非常好的方法,先用一个int数组保存结果,将两个数相应位置相加,所有加完后。再统一处理进位的问题。这种方法相同适用于大整数的乘法。
这个题没什么特别的,注意一下进位别搞错了即可了,还有事实上不用像我写的这么麻烦,能够一開始先推断哪个更长一些。交换一下。代码会简洁非常多。
class Solution { public: string addBinary(string a, string b) { int l1 = a.length(), l2 = b.length(); string c(max(l1, l2)+1, '0'); int i1 = l1-1, i2 = l2-1, ch=0, k = max(l1, l2); while(i1>=0&&i2>=0){ if(a[i1] == '1' && b[i2] == '1'){ c[k--] = ch+'0'; ch = 1; }else if(a[i1]=='1'||b[i2]=='1'){ if(ch){ c[k--] = '0'; }else{ c[k--] = '1'; } }else{ c[k--] = '0'+ch; ch = 0; } i1--; i2--; } while(i1>=0){ if(ch){ if(a[i1] == '1'){ c[k--] = '0'; ch = 1; }else{ c[k--] = '1'; ch = 0; } }else{ c[k--] = a[i1]; } i1--; } while(i2>=0){ if(ch){ if(b[i2] == '1'){ c[k--] = '0'; ch = 1; }else{ c[k--] = '1'; ch = 0; } }else{ c[k--] = b[i2]; } i2--; } if(ch) c[0] = '1'; if(c[0] == '0') c = c.substr(1, c.length()-1); return c; } };