1. 程式人生 > >leetcode371 Sum Of Integers 不用加法計算兩個整數的和

leetcode371 Sum Of Integers 不用加法計算兩個整數的和

Description

Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

Example:
Given a = 1 and b = 2, return 3.

解法

思路:

首先不能用”+”、” - “符號,那麼計算兩個數的和也就只能用“位運算子”。位運算子是處理二進位制數的,先想想十進位制的怎麼進行加法的。

比如3+18=21。 首先個位相加3+8 = 11,個位是1,有進位。進位再與十位相加得到十位是2。
二進位制也一樣,如果不考慮進位,那麼1+0=1、1+1=0、0+0=0 這個結果是和“異或”(^)位運算子的處理結果是一樣的。之後處理進位問題,有且僅有1+1的情況下才會產生進位,所以用“&”位運算子來處理進位情況,運算之後向左移一位(<<)即可。

程式碼:

    public int getSum(int a, int b) {
        if(b == 0) return a;
        return getSum(a^b, (a&b)<<1);
    }