【Java】兩整數之和

題目描述

不使用運算符 + 和 - ,計算兩整數 a 、b 之和。

示例 1:

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

示例 2:

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

都知道java位運算符,可怎麼用?

解題思路

異或操作:相同爲0,不同爲1,就已經能模擬出無進位的加法

比如1+2 = 3

    0 1
+   1 0
-------
    1 1

那有進位怎麼辦?與操作+左移一位

比如2+3 = 5

異或一次後 ,算出低位

    1 0
+   1 1
-------
    0 1

與操作一次後

    1 0
+   1 1
-------
    1 0

左移一位 ,得到進位

    1 0
+   1 1
-------
    1 0 << 1 = 1 0 0

此時把進位和低位加起來,這個時候又是一次加法操作,回憶剛剛的a和b的加法操作,把低位和進位分別看做a和b,繼續重複上面的過程,所以這一定是一個while的循環,直到進位爲0退出循環。

public class getSum {
    public int getSum(int a, int b){
        if(a == 0){
            return b;
        }
        if(b == 0){
            return a;
        }
        int lower = 0;
        int carrier = 0;
        while(true){
            lower = a^b;
            carrier = a&b;
            if(carrier == 0){
                break;
            }
            a = lower;
            b = carrier<<1;
        }
        return lower;
    }
}

 

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