Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Subscribe to see which companies asked this question
不用乘除法和取模运算计算除法。
超范围的情况
1.除数为0
2.被除数为Integer.MIN_VALUE 除数为-1 这样结果会是Integer.MAX_VALUE+1 因为负数最小值能比正数最大值多1
剩余就是全转成正数,然后用二进制除法算就好
public class Solution {
public int divide(int dividend, int divisor) {
if(dividend==-2147483648&&divisor==-1)return Integer.MAX_VALUE;
if(divisor==0)return Integer.MAX_VALUE ;
int flag = 1;
if(dividend<0)flag=-flag;
if(divisor<0)flag = -flag;
long dia =Math.abs((long)dividend);
long dib =Math.abs((long)divisor);
long c = 1;
while(dia > dib){
dib = dib << 1 ;
c = c << 1;
}
int res = 0;
while (dia>=Math.abs((long)divisor)){
while(dia>=dib){
dia = dia - dib;
res+=c;
}
dib=dib>>1;
c=c>>1;
}if(flag>0)return (int)res;
else return (int)(-res);
}
}