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