實現兩個整數的除法,不能用除號和乘號

2021-08-25 19:50:52 字數 859 閱讀 9756

對於兩個整數a和b, 求a/b,可以從1開始列舉結果result,找到滿足 result *b <= a的最大result即為所求,

這是一種可行的演算法,但效率比較低,事實上,列舉result的時候,可以成倍的增加result,找到滿足 result * b <= a的

最大result,然後把a減去 result * b, 接下來對餘數a再次迭代,直到餘數a比b小。

比如計算29/5的過程為:

(1)a = 29, b = 5

找出滿足b*i <= a的最大i, 依次計算:

b*1 = 5, b*2 = 10, b*4 = 20

所以最大的i = 4, 然後把a減去b*4,result加上4

a = a - b*4 = 9

result = result + 4 = 4

轉步驟(2)

(2)a = 9, b = 5

找出滿足b*i <= a的最大i, 依次計算:

b*1 = 5

所以最大的i = 1, 然後把a減去b*1,result加上1

a = a - b*1 = 4

result = result + 1 = 5

轉步驟(3)

(3)a = 4, b = 5, a < b 演算法停止,最後餘數為a = 4, 結果為result = 5

#include #include #define mask 0x80000000

int div_int(int x, int y)

for (; a >= b; a -= b, b = y)

if (flag)

return result;

}int main()

程式設計實現兩個正整數的除法

程式設計實現兩個正整數的除法,當然不能用除法操作符。常規的想,100 7,可以試著7 1,7 2,7 3,7 14做,但這樣子太慢了。於是有人說以2的指數次遞增,也就是7 1,7 2,7 4,7 8,好了,因為7 16 100,所以這個時候就100 7 8 44接著下一次迴圈。int div con...

程式設計實現兩個正整數的除法

程式設計實現兩個正整數的除法,當然不能用除法操作符。return x y.int div const int x,const int y 根據題目,我們知道x y的結果是乙個整數,只是乙個整數的話需要考慮的東西就比較少了。當然如果是小數的話也是可以做的,我們可以借鑑利用兩點確定一元二次函式根的方法,...

面試題 實現兩個數的和,不能用「 」「 」

這道題目和之前leetcode中的二進位制加法很相似。由於無法使用運算子,我們可以改用對位的操作。如果不考慮進製的話 1 1 0,1 0 1,0 1 1,0 0 0,這剛好是異或計算 對於進製,正好是按位與 左移一位之後的結果 在將兩者進行異或,之後再計算進製,直到沒有進製,完成運算,同樣有兩種實現...