【劍指offer】65 不用加減乘除做加法

面試題65. 不用加減乘除做加法

寫一個函數,求兩個整數之和,要求在函數體內不得使用 “+”、“-”、“*”、“/” 四則運算符號。

 

示例:

輸入: a = 1, b = 1
輸出: 2

做題思路:

這裏使用13二進制爲:1101,9二進制爲:1001來做例子。

異或 1^1 = 0 ,1^0 = 1,0^0 = 0.從這三個結果可以看出異或就是在做加法,但是沒有進位。

與     1&1 = 1,1&0 = 0,0&0 = 0.從這三個結果可以看出與就是跟進位有關。

沒有進位:1101和1001異或的結果:0100

進位:1101和1001與的結果:1001,答案是這個嗎?顯然不是,因爲是進位,所以需要左移10010;

沒有進位:10110

進位:0

輸出10110 = 2^4+2^2+2^1 = 22

代碼展示:

class Solution {
    public int add(int a, int b) {
         int jinwei = 0;
        int bujinwei = 0;
        while(b != 0){
            bujinwei = a^b;
            jinwei = (a&b)<<1;
            a = bujinwei;
            b = jinwei;
        }
        return a;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章