JZ48 不用加減乘除做加法

2021-10-23 10:39:43 字數 763 閱讀 9952

劍指offer上遇到的乙個題,還蠻有意思的。

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

解題思路:看到不用四則運算符號的時候第一反應就是將其轉化為二進位制的位運算。在計算機中,整數n是用補碼進行儲存的【補碼:如果n為正數,則原碼=反碼=補碼,如果n為負數,則補碼=反碼+1】。s=a+b其實就是a和b的補碼無進製和+進製的結果,其中,無進製和為a+b補碼的異或運算結果,進製為兩數補碼的按位與運算結果左移一位。

舉例說明

對於1(001)+ 5(101)這個加法算式來說

演算法步驟

計算a和b的無進製和,和進製

如果進製不為0,則說明a+b的結果等於無進製和+進製,此時,把無進製和作為a,進製作為b,繼續計算

如果進製等於0, 說明此時a+b的結果就等於無進製和,返回無進製和即可。

實現**

public class solution 

return num1; }}

JZ48 不用加減乘除做加法

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

JZ48 不用加減乘除做加法

題目描述 寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。題解 不用加減乘除的加法運算,需要用到位運算。1 將兩數異或 異或0 0 0 0 0 0 10 1 1 1 01 0 1 1 11 1 0 答案錯誤 我們從以上 可以看出,當涉及到進製時結果就會錯誤,所以我們需要處理進製。2...

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