当前位置: 面试刷题>> 两个整数相除 (经典算法题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
```
### 码小课网站学习分享
码小课网站提供了丰富的编程学习资源,包括算法、数据结构、编程语言基础、项目实战等内容,非常适合想要深入学习编程的同学们。在码小课,你可以找到更多关于算法优化的技巧、常见编程问题的解决方案以及实战项目的开发过程,帮助你在编程之路上不断进步。