29. 两数相除

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;
    }
        
    
};

 

posted on 2025-03-12 15:11  TMatrix52  阅读(9)  评论(0)    收藏  举报

导航