当前位置: 面试刷题>> 两个整数相除 (经典算法题500道)


完整题目描述

题目:给定两个整数dividend(被除数)和divisor(除数),不使用任何内置函数(如/操作符)来计算它们相除的结果,并返回结果的整数部分。如果divisor为0,则直接返回特殊值(如nullNoneundefined等,根据所用编程语言的习惯),因为任何数除以0在数学上都是未定义的。

示例

  • 输入:dividend = 10, divisor = 3

  • 输出:3

  • 输入:dividend = 7, divisor = -3

  • 注意:结果应为商的整数部分,即-2

PHP 代码示例

function divide($dividend, $divisor) {
    if ($divisor == 0) {
        return null; // 除数为0时返回null
    }
    
    $isNegative = ($dividend < 0) ^ ($divisor < 0); // 判断结果是否需要取负
    $dividend = abs($dividend);
    $divisor = abs($divisor);
    
    $result = 0;
    while ($dividend >= $divisor) {
        $temp = $divisor;
        $multiplier = 1;
        while ($dividend >= ($temp << 1)) { // 左移一位相当于乘以2
            $temp <<= 1;
            $multiplier <<= 1;
        }
        $dividend -= $temp;
        $result += $multiplier;
    }
    
    return $isNegative ? -$result : $result;
}

// 测试
echo divide(10, 3); // 输出: 3
echo "\n";
echo divide(7, -3); // 输出: -2

Python 代码示例

def divide(dividend, divisor):
    if divisor == 0:
        return None  # 除数为0时返回None
    
    is_negative = (dividend < 0) ^ (divisor < 0)  # 判断结果是否需要取负
    dividend, divisor = abs(dividend), abs(divisor)
    
    result = 0
    while dividend >= divisor:
        temp, multiplier = divisor, 1
        while dividend >= temp << 1:  # 左移一位相当于乘以2
            temp <<= 1
            multiplier <<= 1
        dividend -= temp
        result += multiplier
    
    return -result if is_negative else result

# 测试
print(divide(10, 3))  # 输出: 3
print(divide(7, -3))  # 输出: -2

JavaScript 代码示例

function divide(dividend, divisor) {
    if (divisor === 0) {
        return null; // 除数为0时返回null
    }
    
    let isNegative = (dividend < 0) ^ (divisor < 0); // 判断结果是否需要取负
    dividend = Math.abs(dividend);
    divisor = Math.abs(divisor);
    
    let result = 0;
    while (dividend >= divisor) {
        let temp = divisor;
        let multiplier = 1;
        while (dividend >= temp * 2) { // 乘以2
            temp *= 2;
            multiplier *= 2;
        }
        dividend -= temp;
        result += multiplier;
    }
    
    return isNegative ? -result : result;
}

// 测试
console.log(divide(10, 3)); // 输出: 3
console.log(divide(7, -3)); // 输出: -2

码小课网站学习分享

码小课网站提供了丰富的编程学习资源,包括算法、数据结构、编程语言基础、项目实战等内容,非常适合想要深入学习编程的同学们。在码小课,你可以找到更多关于算法优化的技巧、常见编程问题的解决方案以及实战项目的开发过程,帮助你在编程之路上不断进步。