371. Sum of Two Integers
阿新 • • 發佈:2019-01-08
題目:
計算兩個整數A和B相加,但你不允許使用運算子+和-。
例子:
例如,A= 1 和 B = 2, return 3.
分析:DONE
說實話每次看到位運算我就頭疼。其實不會此問題,純屬學習!雖然知道用位運算,知道與或非的原理!
可以很容易地用異或操作模擬實現整數加法運算裡面不進位的結果:
對應與運算及其右移1位運算可以得到所有的進位,
進位一旦為0便沒有繼續進行的必要了,如:a=010010,b=100111,計算步驟如下:
第一輪:a^b=110101,(a&b)<<1=000100, 由於進位(000100)大於0,
則進入下一輪計算,a=110101,b=000100,a^b=110001,(a&b)<<1=001000,
由於進位大於0,則進入下一輪計算:a=110001,b=001000,a^b=111001,(a&b)<<1=0,
進位為0,終止,計算結果為:111001。
class Solution { public: int getSum(int a, int b) { if (a == 0) return b; if (b == 0) return a; int carry=0,add=0; while (b != 0) { add = a ^ b; //模擬加運算 carry = (a & b) << 1; //獲取進位 a=add;//儲存本次計算結果 b=carry; } return a; } };
注:本博文為EbowTang原創,後續可能繼續更新本文。如果轉載,請務必複製本條資訊!
原文地址:http://blog.csdn.net/ebowtang/article/details/51812032
原作者部落格:http://blog.csdn.net/ebowtang
本部落格LeetCode題解索引:http://blog.csdn.net/ebowtang/article/details/50668895