一、题意
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
示例 1:
输入: dividend = 10, divisor = 3
输出: 3
示例 2:
输入: dividend = 7, divisor = -3
输出: -2
说明:
被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
二、解题
解题思路
用除数相加的思路,到相加后的数不小于被除数说明刚好到了我们要的终点,拿出记录的相加次数即可。代码实现过程不能直接暴力,暴力超时。还需判断边界条件。
代码实现
class Solution {
/**
* @param Integer $dividend
* @param Integer $divisor
* @return Integer
*/
function divide($dividend, $divisor) {
$sign = 1;
if (($dividend < 0) && ($divisor > 0) || ($dividend > 0) && ($divisor < 0)) {
$sign = -1;
}
$dividend = abs($dividend);
$divisor = abs($divisor);
if ($dividend < $divisor) return 0;
$sum = $divisor;
$multi = 1;
while ($sum + $sum < $dividend) {
$sum += $sum;
$multi += $multi;
}
$data = $multi + $this->divide($dividend - $sum, $divisor);
$num = $sign < 1 ? 0 - $data : $data;
if ($num > pow(2, 31) - 1) return pow(2, 31) - 1;
if ($num < pow(-2, 31)) return pow(-2, 31);
return $num;
}
}
《军曹大电影5诞生!终极Keroro奇迹的时空岛是也!!》动画片高清在线免费观看:https://www.jgz518.com/xingkong/10875.html