JZ48 不用加減乘除做加法

2021-10-24 05:57:53 字數 647 閱讀 4798

題目描述:

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

題解:

不用加減乘除的加法運算,需要用到位運算。

(1)將兩數異或

異或0+0

0 ^ 0 = 0

0+10 ^ 1 = 1

1+01 ^ 0 = 1

1+11 ^ 1 = 0(答案錯誤)

我們從以上**可以看出,當涉及到進製時結果就會錯誤,所以我們需要處理進製。

(2)兩數相與並左移一位

與運算1 & 1 = 1(需要進製)

1 & 0 = 0(無需進製)

0 & 1 = 0(無需進製)

0 & 0 = 0(無需進製)

我們發現,兩數相與結果為1時需要進製,為0時則不需進製。

進製操作:((1 & 1) << 1) = ( 0 << 1 ) = 10

擁有了兩個基本表示式:

public

class

solution

while

(ans !=0)

;return result;

}}

JZ48 不用加減乘除做加法

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。位運算表 加法位運算對照表 參考 解析 首先看十進位制是如何做的 5 7 12,三步走 第一步 相加各位的值,不算進製,得到2。第二步 計算進製值,得到10.如果這一步的進製值為0,那麼第一步得到的值就是最終結果。第三步 重複上述兩步...

JZ48 不用加減乘除做加法

劍指offer上遇到的乙個題,還蠻有意思的。演算法描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。解題思路 看到不用四則運算符號的時候第一反應就是將其轉化為二進位制的位運算。在計算機中,整數n是用補碼進行儲存的 補碼 如果n為正數,則原碼 反碼 補碼,如果n為負數,則補碼 反...

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

題目描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。class solution return num1 class solution def add self,a int,b int int x 0xffffffff a,b a x,b x while b 0 a,b a ...