一、题意

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

本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

8 条评论

  1. voyhpvtnao
    voyhpvtnao

    迷失在混乱之中

  2. nzwxlyfxxe
    nzwxlyfxxe

    冰山上的来客

  3. zgvootujqx
    zgvootujqx

    萨尔沙

  4. lwvdytheuc
    lwvdytheuc

    排球之花

  5. lnbzmofjja
    lnbzmofjja

    双重智脑

  6. tyhdetnhvt
    tyhdetnhvt

    梦幻岛

  7. rkagvjypme
    rkagvjypme

    记忆奇旅

  8. ilkwingyxx
    ilkwingyxx

    《军曹大电影5诞生!终极Keroro奇迹的时空岛是也!!》动画片高清在线免费观看:https://www.jgz518.com/xingkong/10875.html

添加新评论