PHP-两数相除

给定两个整数,被除数 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。

来源:力扣(LeetCode)

class Solution {

/**

* @param Integer $dividend

* @param Integer $divisor

* @return Integer

*/

function divide($dividend, $divisor) {

$max = pow(2,31) - 1;

$min = 0-pow(2,31);

if($dividend==$min && $divisor==-1) return $max;

$flag = 1;

if($dividend > 0){

$dividend = 0 - $dividend;

}else{

$flag = -$flag;

}

if($divisor > 0){

$divisor = 0 - $divisor;

}else{

$flag = -$flag;

}

$s = 0;

while($dividend <= $divisor){

$k = 1;

$tmp = $divisor;

#本题中,如果除法结果溢出,则返回$max,在子while循环条件中得以利用

while($dividend < $tmp+$tmp && $tmp+$tmp<0){

$tmp += $tmp;

$k += $k;

}

$s += $k;

$dividend -= $tmp;

}

return ($flag>0)?$s:-$s;

}

}