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

2021-09-08 11:05:46 字數 825 閱讀 7941

如題所示

假設問題是a除以b:

題目要求是正整數,所以考慮的條件不是很多,如果要求是整數的話,即要考慮正負情況的判斷。

1、最簡單的就是依次用被除數a減去除數b,並統計減去的次數,即為相除結果;

這種方法效率不高,尤其是在被除數a很大,除數b很小的情況下,效率非常低;

2、考慮每次相減時,將b翻倍,這樣就可以提高很大的效率;

3、考慮位運算,因為位運算一般都比較高效;

4、採用遞迴的方法;

注意:**中沒有考慮b=0的判斷

#include using namespace std;

// ***** method

int mydiv_0(unsigned int a,unsigned int b)

return ans;

}// more effective

int mydiv_1(unsigned int a,unsigned int b)

a-=x;

ans+=y;

}return ans;

}// bit shift, more effective

int mydiv_2(unsigned int a,unsigned int b)

a-=x;

ans+=y;

}return ans;

}// recursive method

int mydiv_3(unsigned int a,unsigned int b)

return mydiv_3(a-x,b)+y;

}int main()

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

基礎知識 1 常用的等式 n n 1 n 1 2 獲取整數n的二進位制中最後乙個1 n n 或者n n 1 3 去掉整數n的二進位制中的最後乙個1 n n 1 方法一 根據除法運算的原理進行減法操作,對除法迴圈減被除數,減一次結果加一,直到剛好減為0或餘數小於被除數為止。方法二 遞迴法求解。如果每次...

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

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

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

程式設計實現兩個正整數的除法,當然不能用除法操作符。常規的想,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...