A + B 問題(不能用+等數學運算符。)

給出兩個整數a和b, 求他們的和, 但不能使用 + 等數學運算符。

說明

1.a和b都是 32位 整數麼?

是的
2.我可以使用位運算符麼?

當然可以

樣例

如果 a=1 並且 b=2,返回3

解題思路:

首先想到的是異或運算,如二進制的11^10=01,每一位異或都相對於每一位的加法,但是缺乏進位。
使用按位與“&”運算可以幫助我們判斷該位是否有進位。如11&11 =11,說明兩位在加運算中都產生了進位1。由於該進位是加在高位上的,所以
很自然的想到了把與運算的結果往左移一位,再和異或結果相加,即爲最後結果。 

代碼

public class Solution {

    public int aplusb(int a, int b) {
        // write your code here
        // a^b;//10^11=01沒有進位
        // a&b //10&11=10 說明第2個數有進位,但是進位在高位(第3位)
        // <<1 //左移動一位 就是100
        // 最後把結果再進^操作給a,直到沒有進位
          if (b == 0)//有1代表還有進位
            return a;
        else
            return aplusb(a^b, (a&b) << 1);
    }
};
發佈了34 篇原創文章 · 獲贊 18 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章