《劍指Offer》面試題 不使用加減乘除做加法運算

2021-07-05 21:43:25 字數 669 閱讀 5467

題目描述:

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

如果沒有以前沒有做過類似的,則不太好想,雖然當限定不使用加減乘除做加法演算法,我們都會想到會用其他的位運算來做。但要想想出來,還是有一定困難的。

思路:分三步

1、先將各bit位相加sum,不計進製,這一步可以用m^n實現

2、計算進製,進製如何來,用m&n可以得到m和n中都為1的bit位,而不全為1的位則全部變為了0,該位相加會發生進製,使得左邊一位加1,因此(m&n)<<1便可得到進製的數carry;

3、將前面兩步的結果相加即(sum、carry相加),即重複上面兩步,直到進製為零,則計算結束。

/*

輸入:輸入可能包含多個測試樣例。

對於每個測試案例,輸入為兩個整數m和n(1<=m,n<=1000000)。

輸出:對應每個測試案例,輸出m+n的值。

樣例輸入:

3 47 9

樣例輸出:716

*/#include

#include

int sumabout2num(int num1,int num2)while(num2!=0);

return num1;

}int main(void)

}

劍指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的情形。對於負整指數,我們可以...

劍指offer面試題15

面試題15 鍊錶中倒數第k個結點 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第乙個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。預備知識 鍊錶結點的定義如下 ...