劍指offer 學習筆記 不用加減乘除做加法

2021-10-05 09:05:54 字數 597 閱讀 9328

面試題65:不用加減乘除做加法。

5的二進位制是101,7的二進位制是10001。我們試著把計算分為3步:

1.各位相加但不計進製,得到的結果是10100。

2.記下進製,此例中只有最後一位有進製,結果是二進位制10。

3.把前兩步的結果相加,結果為10110,正好是22。

我們用位運算翻譯上述步驟:

1.不考慮進製相加即異或的結果。

2.只有1+1才會產生進製,可以看做兩個對應位做與運算,再向左移一位。

3.相加前兩步結果,即重複1、2步,直到沒有進製:

#include

using

namespace std;

intadd

(int num1,

int num2)

while

(num2 !=0)

;return res;

}int

main()

相關問題:

不用中間變數,交換兩個值:

劍指offer 不用加減乘除做加法

題目描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。輸入 輸入可能包含多個測試樣例。對於每個測試案例,輸入為兩個整數m和n 1 m,n 1000000 輸出 對應每個測試案例,輸出m n的值。樣例輸入 3 4 7 9樣例輸出 7 16思路 1 先將各bit位相加,不計進製,這...

劍指offer 不用加減乘除做加法

題目描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。思路 本道題用乙個例子講解可能會更為清晰點。現舉5 7 12的例子來說明 1.將兩個數字轉化為二進位制 5 0101 7 0111,將兩個數做異或操作 即相當於加法的不進製操作 5 7 0101 0111 0101 2.計算...

劍指offer 不用加減乘除做加法

題意 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。分析 之前自己手動yy了一下,直接用二進位制進行位運算,然後沒考慮負數,直接wa,接著仔細分析,數分四種情況 a 0,b 0 a 0,b 0 a 0,b 0 a 0,b 0 然後計算,注意進製或者借位的情況就ok了,比較複雜。c...