class Solution {
public int divide(int dividend, int divisor) {
int sign = (dividend ^ divisor) >> 31;//确定结果的符号
long lDividend = Math.abs((long) dividend);//转化成long型
long lDivisor = Math.abs((long) divisor);
long res = 0; //这里注意结果也要使用long型,不然会有越界的问题 //-2147483648
//-1
while (lDividend >= lDivisor){//在被除数大于除数的时候
long tmp = lDivisor;//将除数临时储存起来
long i = 1;
while (lDividend >= tmp){//如果满足条件进行除数倍增的循环,如果不满足,那就从头开始减(除数最小的时候)
lDividend -= tmp;
res += i;
i <<= 1;
tmp <<= 1;//除数 X 2
}
}
if (sign == -1) res *= -1;//结果取sign
if (res < Integer.MIN_VALUE) return Integer.MIN_VALUE; //如果结果小于int的最小值,那就返回int的最小值
else if (res > Integer.MAX_VALUE) return Integer.MAX_VALUE;//如果比int的最大值还大,那就要返回int的最大值,这也就是为什么上面需要将int转化成long的原因
return (int)res;//返回结果的时候注意将结果再转化为int
}
}
转载于:https://www.cnblogs.com/zhaijiayu/p/11521429.html