1684838553 / arithmeticQuestions

程序员的算法趣题
2 stars 0 forks source link

两数相除 #9

Open 1684838553 opened 1 year ago

1684838553 commented 1 year ago

29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

示例 1:

输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = truncate(3.33333..) = truncate(3) = 3 示例 2:

输入: dividend = 7, divisor = -3 输出: -2 解释: 7/-3 = truncate(-2.33333..) = -2

1684838553 commented 1 year ago

/**
 * @param {number} dividend
 * @param {number} divisor
 * @return {number}
 */
var divide = function(dividend, divisor) {
    let flag = true
    if((dividend < 0 && divisor > 0) || (divisor < 0 && dividend > 0)){
        flag = false
    } else{
        flag = true
    }

     if(dividend == 0) {
        return 0
     }
    if (dividend === -(2**31) && divisor === -1) {
        return 2**31-1
    }
    if (dividend === -(2**31) && divisor === 1) {
        return -(2**31)
    }

    dividend = Math.abs(dividend)
    divisor = Math.abs(divisor)

    let result = 0
    while(dividend >= divisor){
        dividend -= divisor
        result += 1
    }

    return flag ? result : -result
};