面試題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...