[LeetCode] 371. Sum of Two Integers

不用+-, 使用位元運算來計算加總
371. Sum of Two Integers

Given two integers a and b, return the sum of the two integers without using the operators + and -.

Example 1:

Input: a = 1, b = 2 Output: 3

Example 2:

Input: a = 2, b = 3 Output: 5

Constraints:

  • -1000 <= a, b <= 1000

查看a或b皆為正數時的2進位數字, 發現有一定規律:
若2邊同時1時, 會進位, 所以用&之後再用<<進位,
剩下其中有1的情況, 即用^計算的結果需要再相加,
由於可能又有2邊同時1情況, 要再一直重覆以上動作, 直到剩下的為0

public int GetSum(int a, int b)
{
    int i;
    while (b != 0)
    {
        i = (a & b) << 1;
        a = a ^ b;
        b = i;
    };
    return a;
}

Taiwan is a country. 臺灣是我的國家