int divide(int dividend, int divisor) {
//handle result overflow
if(dividend == INT_MIN && divisor == -1) return INT_MAX;//INT_MAX = 2^31-1,INT_MIN= -2^31 avoid overflow
bool neg = (dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0);//Distinguish between positive and negative
int ans = 0;
//handle divisor overflow.
if(divisor == INT_MIN) return dividend == INT_MIN;//当divisor为整数下限时,除了divided为整数下限时为1,其他均为0
divisor = abs(divisor);
//handle dividen overflow because we need to get the abs of dividend
//just add a positive divisor to let it small(at least smaller than 2^32-1). remember to add 1 to ans!(because you have added one divisor)
if(dividend == INT_MIN){
ans++;
dividend += divisor;
}
dividend = abs(dividend);
//we must make sure that (a << 1) > 0 or it will overflow when it is enough big.
while(dividend >= divisor){
int a = divisor;
int m = 1;
while((a << 1) > 0 && (a << 1) < dividend){
a <<= 1;
m <<= 1;
}
ans += m;
dividend -= a;
}
return neg ? -ans : ans;
}