不用除法操作符如何實現兩個正整數的除法?

2021-08-21 07:54:44 字數 583 閱讀 3581

基礎知識

(1)常用的等式:-n = ~(n - 1) = ~n + 1

(2)獲取整數n的二進位制中最後乙個1:n &( -n ) 或者n & ~(n - 1)

(3)去掉整數n的二進位制中的最後乙個1:n &(n - 1)

方法一

根據除法運算的原理進行減法操作,對除法迴圈減被除數,減一次結果加一,直到剛好減為0或餘數小於被除數為止。

方法二

遞迴法求解。如果每次採用將比較數翻倍的比較方法,則演算法效率能夠得到極大優化。

方法三

採用移位操作實現,位操作的效率一般都比較高效。

引申1:如何只用邏輯運算實現加法運算?

遞迴,按位異或,進製用與&運算並進行移位操作,直到無進製。

引申2:如何只用邏輯運算實現乘法運算?

通過一系列移位加法完成,最後乙個1可通過b&~(b - 1)求得,可通過b & (b - 1)去掉,為了高效的得到左移的位數,可提前計算乙個map

(筆試題)不用除法操作符,實現兩個正整數的除法

如題所示 假設問題是a除以b 題目要求是正整數,所以考慮的條件不是很多,如果要求是整數的話,即要考慮正負情況的判斷。1 最簡單的就是依次用被除數a減去除數b,並統計減去的次數,即為相除結果 這種方法效率不高,尤其是在被除數a很大,除數b很小的情況下,效率非常低 2 考慮每次相減時,將b翻倍,這樣就可...

不用任何操作符實現兩個正整數相加

首先,既然不能夠用操作符,那我們只能使用位操作來進行。對於位操作有 這5種操作。那問題是如何能夠用這3種操作來實現兩個資料的相加呢?在具體操作前,我們先來看看10進製數的相加過程,比如對於 283 969 這個加法操作,一般是從低位往高位進行操作,並且如果兩個數字加起來超過10了,則需要進1。那麼其...

python 操作符 (兩個乘號就是乘方)

乙個乘號 如果運算元是兩個數字,就是這兩個數字相乘,如2 4,結果為8 兩個乘號就是乘方。比如3 4,結果就是3的4次方,結果是81 如果是字串 列表 元組與乙個整數n相乘,返回乙個其所有元素重複n次的同型別物件,比如 str 3將返回字串 strstrstr 如果是函式定義中引數前的 表示的是將呼...