LeetCode Problem-Sum of Two Integers

URNOTJANET發表於2018-02-27

這道題挺經典的,之前自學python的時候看過這樣一個例子,這裡記錄一下思路。

題目描述:

給定兩個整數,實現a + b但不用 + 或 - 操作符

思路

一開始可能會覺得奇怪,不給使用四則運算還玩什麼?但這是計算機問題,可以回顧一下加法和減法的具體操作(減法是加法的逆運算,視為同理)
對於 a + b = c 而言,不妨以十進位制舉例,對於 15 + 17 = 32而言,可以先視作
1.按位相加
2.根據有無進位繼續做加和
從底層實現的角度來看,這裡跟 加法器 的原理是一致的,只是底層是二進位制而不是十進位制罷了。
半加器原理:
S = ~A & B + A & ~B = A^B (按位加和)
C = A & B (進位判斷)
因為存在進位的情況,所以在這道題的實現中,需要在相加之後做一個 << 1 操作,總程式碼實現如下

 int getSum(int a, int b) {
    if(b == 0)return a;
    int carry = (a & b) << 1;
    int sum = a ^ b;
    return getSum(sum,carry);
    
}
複製程式碼

相關文章