lintcode -- A+B問題

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

 注意事項

你不需要從輸入流讀入數據,只需要根據aplusb的兩個參數a和b,計算他們的和並返回就行。

說明

a和b都是 32位 整數麼?

  • 是的

我可以使用位運算符麼?

  • 當然可以



/*
位運算實現整數加法本質就是用二進制進行運算。
其主要用了兩個基本表達式:
x^y //執行加法,不考慮進位。
(x&y)<<1 //進位操作
令x=x^y ;y=(x&y)<<1 進行迭代,每迭代一次進位操作右面就多一位0,
最多需要“加數二進制位長度”次迭代就沒有進位了,此時x^y的值就是結果。
我們來做個3位數的加法:
101+011=1000 //正常加法
位運算加法:
(1) 101 ^ 011 = 110
(101 & 011)<<1 = 010
(2) 110 ^ 010 = 100
(110 & 010)<<1 = 100
(3) 100 ^ 100 = 000
(100 & 100)<<1 = 1000
此時進行相加操作就沒有進位了,即000 ^ 1000=1000即是最後結果。
*/
class Solution {
    public int aplusb(int a, int b) {
        while(b != 0){
            int carry = a & b;
            a = a ^ b;
            b = carry << 1;
        }
        return a;
    }
}
發佈了124 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章