LeetCode29題 兩數相除

2021-09-19 10:02:32 字數 882 閱讀 1417

題目描述:給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。

思路:從除法的定義說,被除數除以除數等於商+餘數。a/b=c。將c可以用二進位制表示:

所以可以從大到小位移,如果a>>i>b,說明,已經找到最大的為1的位。此時a=a-b*2^i1。此時,res+=2的i1次方。直到找到最後一位為止。

class solution {

public int divide(int dividend, int divisor) {

//先處理特殊情況

if(divisor==-1&÷nd==integer.min_value) return integer.max_value;

if(divisor==0) return 0;

//再處理正負號問題

boolean flag=(dividend^divisor)<0;

//都變為正數,消除位移時正負號的影響

long first=math.abs((long)dividend);

long second=math.abs((long)divisor);

//定義乙個結果

int res=0;

//開始進行位運算

for (int i = 31; i >= 0; i--) {

if((first>>i)>=second){

res+=1測試結果如下:

注意點:在取絕對值前,需要先轉換型別;

LeetCode29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3輸出 3示例 2 輸入 dividend 7,divisor 3輸出 2說...

LeetCode 29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3 輸出 3 示例 2 輸入 dividend 7,divisor 3 輸出...

leetcode 29 兩數相除

給定兩個整數,被除數dividend和除數divisor。將兩數相除,要求不使用乘法 除法和 mod 運算子。返回被除數dividend除以除數divisor得到的商。示例 1 輸入 dividend 10,divisor 3輸出 3示例 2 輸入 dividend 7,divisor 3輸出 2說...