divisor增加的时候*2,减小/2.
handle integer overflow常用trick: long
public class Solution {
public int divide(int a, int b) {
if(a==Integer.MIN_VALUE && b==-1)return Integer.MAX_VALUE;
long dividend=(long)a, divisor=(long)b;
if(dividend==0)return 0;
if(divisor==0)return Integer.MAX_VALUE;
int sign= (dividend>0 && divisor >0 ) || (dividend<0 && divisor<0) ? 1 : -1;
dividend=Math.abs(dividend);
divisor=Math.abs(divisor);
int result=0, count=1;
long base=divisor;
while(dividend>0)
{
if(dividend>=divisor)
{
dividend-=divisor;
result+=count;
if(divisor*2<=dividend)
{
divisor*=2;
count*=2;
}
}
else
{
if(divisor==base)break;
divisor/=2;
count/=2;
}
}
return sign*result;
}
}