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

2021-08-20 19:03:05 字數 685 閱讀 1872

冥思苦想做個記錄。

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

第一步:例如5加7等於12,首先不計算進製,則為2,計算進製為10 + 2.注意這裡只能進一位,因為是十進位制,則進一位就變為10.所以最後相加為2+10=12;

第二步:怎麼判斷是否還要繼續進製?5+7大於10,需要向前進一位。

第三步:最終結果是12.

利用二進位制是如何實現的呢?

第一步:不計算進製,則是各個位的相加的餘數,異或操作是兩個二進位制位相加的結果。5---101,7---111.執行完異或操作後剩餘010.

第二步:計算進製.是否需要進製需要看兩個數與完後的結果是否為0,如果不為0,說明存在同乙個位置上都為1的情況,所以需要進製。

第三步:重複執行相加的步驟:010^1010 = 1000.看看是否還需要進製:010&1010=0010,還有一位為1,則需要進一步移位相加。

第四步:現在執行1000和0100相加的操作。1000^0100 = 1100,1000&0100=0000.所以沒有位置為1,則不需要進製,然後異或的的結果就是最後相加的結果。

**實現:

int add(int num1, int num2)

num2是否為0來控制是否需要繼續進行遞迴計算,如果num2不為0,則需要進一步遞迴相加。

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