【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;
    }
}

 

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