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

2021-06-22 07:51:00 字數 794 閱讀 3223

題目描述:寫乙個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算符號。

輸入:輸入可能包含多個測試樣例。

對於每個測試案例,輸入為兩個整數m和n(1<=m,n<=1000000)。

輸出:對應每個測試案例,輸出m+n的值。

樣例輸入:

3 4

7 9

樣例輸出:

7

16

思路:1、先將各bit位相加,不計進製,這一步可以用m^n實現

2、加上進製,進製如何來,用m&n可以得到m和n中都為1的bit位,而不全為1的位則全部變為了0,該位相加會發生進製,使得左邊一位加1,因此(m&n)<<1邊可得到進製後要加的1的位置;

3、將前面兩步的結果相加,相加的時候還有可能再產生進製,因此二者相加的過程可以再次重複迴圈步驟1和2,直到(m&n)<<1變為了0,這時候不會再產生進製,退出迴圈即可。

**如下:

[cpp]view plain

copy

#include

intaddnumthoughbit(

inta,

intb)  

return

a;  

}  int

main()    

高位左移後溢位,捨棄。

左移一位相當於該數乘以2,左移2位相當於該數乘以2^2=4

劍指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...

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

冥思苦想做個記錄。題目 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。第一步 例如5加7等於12,首先不計算進製,則為2,計算進製為10 2.注意這裡只能進一位,因為是十進位制,則進一位就變為10.所以最後相加為2 10 12 第二步 怎麼判斷是否還要繼續進製?5 7大於10,需...