《劍指offer》面試題65 不用加減乘除做加法

2021-09-18 06:45:31 字數 756 閱讀 3828

寫乙個函式,求兩個正數之和,要求在函式體內不能使用四則運算符號。

思路:不能用四則運算,那只能通過位運算了。其實四則運算是針對十進位制,位運算是針對二進位制,都能用於運算。下面以0011(即3)與0101(即5)相加為例說明

1.兩數進行異或:  0011^0101=0110 這個數字其實是把原數中不需進製的二進位制位進行了組合

2.兩數進行與: 0011&0101=0001 這個數字為1的位置表示需要進製,而進製動作是需要向前一位進製

3.左移一位: 0001<<1=0010

此時我們就完成0011 + 0101 = 0110 + 0010的轉換

如此轉換下去,直到其中乙個數字為0時,另乙個數字就是原來的兩個數字的和

package chapter6;

public class p310_addtwonumbers while (num2!=0);

return num1;

}public static void main(string args)

}

測試用例:

a.輸入正數、負數和0。

1.不使用新的變數,交換兩個變數的值。比如有兩個變數a、b,我們希望交換它們的值。有兩種不同的方法:基於加減法(a=a+b;b=a-b;b=a-b;);基於異或運算(a=a^b; b=a^b; a=a^b;)。

2.[leetcode] 2.add two numbers 兩個數字相加

參考:

劍指 面試題65 不用加減乘除做加法

題目寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。思路 利用位運算s a b n cs a b n c s a b n c其中 n a b 非進製和 異或運算 c a b 進製 與運算 左移一位 end return a python class solution def add...

劍指offer面試題7

面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...