二進位相加,本質上就是大整數加法,有關大整數加法我的舍友教過我一個很好的方法,先用一個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; }};