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