牛客網劍指offer第48題 不用加減乘除做加法

2022-05-02 13:42:08 字數 887 閱讀 7027

題目:

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

思路:分析:實現兩個是相加不用四則運算,根據計算機中的運算不用四則運算那麼肯定是位運算了。

(以下分析來自劍指offer)比如我們計算5+17=22這個結果,世界上,我們可以分為3個步驟計算,第一步各位數相加不進製,此時的結果是12(個位相加不進製是2,十位相加是1),所以結果是12; 第二步做進製,5+7有進製,進製值是10;第三步是把前兩步計算結果加起來。12 + 10 = 22.

那麼運用位運算二進位制的數字也可以這麼考慮,5是二進位制的101,17是二進位制的10001。試著把計算分為3步走,

第一步各位相加不進製,得到的結果是10100;

第二步是記下進製,根據這個例子進製計算結果是10;

第三步是把前兩步計算結果相加得到結果10110.轉化為10進製剛好是22。

用二進位制計算,第一步不考慮進製,即每一位相加 0+0=0,1+1=0,0+1=1,1+0=1,結果符合二進位制資料的異或運算第二步只考慮進製運算,0+0,0+1,1+0都不會進製,只有1+1才會進製,結果符合兩個數的與運算結果然後向左移動一位。

第三步,把前兩步驟的結果相加,相加步驟仍然是重複前兩步驟。直到不產生進製值

**如下:

1

class

solution

19return

num1;20}

21 };

說明:加法的過程,實際上進製位是乙個逐漸上浮的過程。什麼時候進製位沒有了,說明加法完成了。因此上述中根據num2是否為0來判斷加法運算是否結束。

牛客網 劍指Offer(66題)

1 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方法一 直接遍歷二維陣列 public class solution find 8,a public st...

牛客網 劍指Offer 索引

二維陣列中的查詢 替換空格 從尾到頭列印鍊錶 重建二叉樹 用兩個棧實現佇列 旋轉陣列的最小數字 斐波那契數列 跳台階 跳台階 矩形覆蓋 二進位制中1的個數 數值的整數次方 調整陣列順序使奇數字於偶數前面 鍊錶中倒數第k個結點 反轉鍊錶 合併兩個排序的鍊錶 樹的子結構 二叉樹的映象 順時針列印矩陣 包...

牛客網 劍指Offer 索引

二維陣列中的查詢 替換空格 從尾到頭列印鍊錶 重建二叉樹 用兩個棧實現佇列 旋轉陣列的最小數字 斐波那契數列 跳台階 跳台階 矩形覆蓋 二進位制中1的個數 數值的整數次方 調整陣列順序使奇數字於偶數前面 鍊錶中倒數第k個結點 反轉鍊錶 合併兩個排序的鍊錶 樹的子結構 二叉樹的映象 順時針列印矩陣 包...