給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。
示例 1:
輸入: dividend = 10, divisor = 3 輸出: 3 示例 2:
輸入: dividend = 7, divisor = -3 輸出: -2 說明:
被除數和除數均為 32 位有符號整數。 除數不為 0。 假設我們的環境只能儲存 32 位有符號整數,其數值範圍是 [−2^31, 2^31 − 1]。本題中,如果除法結果溢位,則返回 2^31 − 1。
public
static
intdivide
(int dividend,
int divisor)
//除數=最小整型數的處理
if(divisor == integer.min_value)
return0;
}//被除數=最小整型數且除數=-1,結果溢位的處理
if(dividend == integer.min_value && divisor ==-1
)//被除數=0直接返回0
if(dividend ==0)
//被除數、除數正負位標誌
boolean negtive1 =
true
;boolean negtive2 =
true
;//判斷是否為正數if(
(dividend &
0x80000000)==
0)if(
(divisor &
0x80000000)==
0)//記錄最終結果的正負
if(negtive1 && negtive2 ||
!negtive1 &&
!negtive2)
else
int target =0;
int countbit =0;
int temp = divisor;
//模擬除法運算,先找到除數最大可以左移到多少
while
(dividend <= temp)
else
}//模擬除法逐位的運算
while
(countbit >=
0&& dividend <= divisor)
//做了多少次減法,就是該位除之後的結果
target +=
(count << countbit)
; countbit--
; temp >>=1;
}//變為負數
if(negtive1)
return target;
}
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說...