public class Divide {
static final int MAX = Integer.MAX_VALUE;
static final int MIN = Integer.MIN_VALUE;
public int divide(int dividend, int divisor) {
// 溢出的情况
if (dividend == MIN && divisor == -1) {
return MAX;
}
// 记录符号位
int sign = -1;
if ((dividend > 0 && divisor >0) || (dividend < 0 && divisor < 0)) {
sign = 1;
}
// 全部转换成负数 防止溢出 因为负数比正数范围更大 -128 - 127
dividend = dividend > 0 ? -dividend : dividend;
divisor = divisor > 0 ? -divisor : divisor;
int ans = 0;
// 都是负数的时候 比较正好相反
while (dividend <= divisor) {
// 每次递增的数
int temp = divisor, count = 1;
// 除完有余数 说明最少是2倍大小
while (temp >= dividend - temp) {
temp += temp; // 每次需要多减去一个除数
count += count; // 商累加
}
dividend -= temp; // 每次需要多减去一个除数
ans += count; // 计算商
}
return sign < 0 ? -ans : ans;
}
}