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

2021-10-19 10:27:38 字數 717 閱讀 2290

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

示例:輸入: a = 1, b = 1

輸出: 2

a, b 均可能是負數或 0

結果不會溢位 32 位整數

假設:

a的二進位制1011

b的二進位制1110

對於a,b相加的結果來說就是:0101 (不進製)//也就是異或操作

而進製的結果就是1010這個值再往左移一位//與操作後左移

隨後將這兩個值加起來

這裡的加起來這個操作又可以類似於a,b相加來重複上次的操作

也就是將異或操作當作a

與操作後左移當作b

重複操作

那什麼時候結束呢,自然是表示進製的b==0的時候,異或結果就是真正的答案

注意的細節就是int的二進位制表示中一共32位

最左邊一位是用來處理正負的,所以int最大為2^31-1

所以如果最左邊一位為1,那麼就為負數,而負數的左移是未被定義的

所以需要再定義乙個值為

01111111 11111111 11111111 11111111

讓這個值來 與a與b的進製,保證左移的值最左邊的值一定是0,也就是正數

class

solution

return a;}}

;

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

劍指offer contents 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。示例 輸入 a 1,b 1 輸出 2 又是一道腦筋急轉彎的題目。不能用加減乘除運算,就只能用二進位制位運算了。思路是通過二進位制位運算模擬十進位制的加法,加法分為3步 1.對應位相加,得到非進製和 1...

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