29. Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
思路:位移很有意思
d << 1 就相当与d*2
d << 2 就相当与d*4
1 << 0 就相当于1
1 << 1 就相当于2
1 << 2 就相当与4
这里我们用一个临时变量 mul_d 存 d 的左移操作,注意: mul_d 必须为long,因为左移操作
很可能溢出!!利用了二进制每一位都是2的倍数的特点
public class Solution {
public int divide(int dividend, int divisor) {
if (divisor==0||(dividend==Integer.MIN_VALUE && divisor==-1))
return Integer.MAX_VALUE;
int i,result=0;
long dividLong = Math.abs((long)dividend);
long divisLong = Math.abs((long)divisor);
while(dividLong>=divisLong){
long multi_divis = divisLong;
i = 0;
while(dividLong>=(multi_divis<<1)){
i++;
multi_divis <<=1;
}
dividLong -= multi_divis;
result += 1<<i;
}
if((dividend>0 && divisor>0) || (dividend<0 && divisor<0)){
return result;
}else{
return -result;
}
}
}