1. 程式人生 > >371. Sum of Two Integers

371. Sum of Two Integers

題目:

計算兩個整數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