題目描述:給定兩個整數,被除數 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說...