class Solution {
public:
int divide(int dividend, int divisor) {
// 处理特殊情况
if (divisor == 1) return dividend;
if (divisor == -1) {
if (dividend == INT_MIN) return INT_MAX; // 溢出处理
return -dividend;
}
// 确定符号
bool negative = (dividend > 0) ^ (divisor > 0);
// 转换为负数运算防止溢出
int a = dividend > 0 ? -dividend : dividend;
int b = divisor > 0 ? -divisor : divisor;
// 特判除数绝对值更大
if (a > b) return 0;
int result = 0;
while (a <= b) {
int value = b; // 当前除数倍数值
int quotient = 1; // 当前倍数
// 找到不大于被除数的最大倍数 在负数中,值越大绝对值越小。
while (value >= INT_MIN / 2 && value + value >= a) {
value += value; // 翻倍(负数加法相当于正数乘法)
quotient += quotient;
}
a -= value;
result += quotient;
}
return negative ? -result : result;
}
};