劍指Offer 65 不用加減乘除做加法

2022-03-06 10:42:35 字數 839 閱讀 4012

劍指offer

contents

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

示例:

輸入: a = 1, b = 1

輸出: 2

又是一道腦筋急轉彎的題目。不能用加減乘除運算,就只能用二進位制位運算了。

思路是通過二進位制位運算模擬十進位制的加法,加法分為3步:

1. 對應位相加,得到非進製和

10001(十進位制的17)

+00101(十進位制的5)

------

10100

2. 計算進製結果,將需要進製的位置標記為1

10001

&00101

------

00001 << 1 = 00010

3. 將非進製和與進製部分相加,得到最終結果

10100

+00010

------

10110(十進位制的22)

class

solution

return a;

}}

時間複雜度:o(1),最多隻需要進行32次迴圈(即每一位都要進製的情況),是常數

空間複雜度:o(1),只有常數個輔助變數

劍指 Offer 65 不用加減乘除做加法

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。示例 輸入 a 1,b 1 輸出 2 a,b 均可能是負數或 0 結果不會溢位 32 位整數假設 a的二進位制1011 b的二進位制1110 對於a,b相加的結果來說就是 0101 不進製 也就是異或操作 而進製的結果就是1010這個...

劍指 Offer 65 不用加減乘除做加法

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。示例 輸入 a 1,b 1 輸出 2 a,b 均可能是負數或 0 結果不會溢位 32 位整數ab 當前位進製00 0010 1001 1011 01記當前位為digit,進製為c,有以下關係 digit a b,c a b。則加法運算...

CPP劍指 Offer 65 不用加減乘除做加法

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。示例 輸入 a 1,b 1 輸出 2 不能使用加減乘除四則運算,所以只能返本溯源想到使用二進位制的位運算實現相加操作。二進位制位運算中,異或操作 1 1 0 0 0 0 1 0 1 0 1 1,可以模擬無進製的加操作 與操作 1 1 ...