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


### 完整题目描述 题目:给定两个整数`dividend`(被除数)和`divisor`(除数),不使用任何内置函数(如`/`操作符)来计算它们相除的结果,并返回结果的整数部分。如果`divisor`为0,则直接返回特殊值(如`null`、`None`、`undefined`等,根据所用编程语言的习惯),因为任何数除以0在数学上都是未定义的。 ### 示例 - 输入:`dividend = 10, divisor = 3` - 输出:`3` - 输入:`dividend = 7, divisor = -3` - 注意:结果应为商的整数部分,即`-2` ### PHP 代码示例 ```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 代码示例 ```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 代码示例 ```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 ``` ### 码小课网站学习分享 码小课网站提供了丰富的编程学习资源,包括算法、数据结构、编程语言基础、项目实战等内容,非常适合想要深入学习编程的同学们。在码小课,你可以找到更多关于算法优化的技巧、常见编程问题的解决方案以及实战项目的开发过程,帮助你在编程之路上不断进步。
推荐面试题