天天看點

LintCode1:位運算實作A+B

題目描述

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

測試用例

解題思路

不能用+号,那麼隻能用位運算來求解了,實際計算機中的加法也是用位運算來做的。

計算機隻知道0,1,根據加法的性質,可以得出下表:

a b c

0 0 0

0 1 1

1 0 1

1 1 0

可以看到,這正和異或運算符^的結果一緻。

另外對于進位:

a b c

0 0 0

0 1 0

1 0 1

1 1 1

很明顯示,這正是與運算符&的結果。

到這裡,問題就引刃而解了,不斷的異或操作直到進位為0.

class Solution {
public:
    /*
     * @param : An integer
     * @param : An integer
     * @return: The sum of a and b
     */
    int aplusb(int a, int b) {
        // write your code here
        while (b != ) {
            int _a = a ^ b;
            int _b = (a & b) << ;
            b = _b;
            a = _a;
        }
        return a;
    }
};
           

繼續閱讀