Skip to content

29. Divide Two Integers

https://leetcode.com/problems/divide-two-integers/

c++
class Solution {
public:
    int divide(int dividend, int divisor) {
        bool sign = (dividend < 0) == (divisor < 0);
        int a = dividend < 0 ? -dividend : dividend;
        int b = divisor < 0 ? -divisor : divisor;
        int ret = 0;
        while (a >= b) {
            int subVal = b;
            int times = 1;
            while (a >= (subVal << 1)) {
                subVal = subVal << 1;
                times = times << 1;
            }
            a -= subVal;
            ret += times;
        }
        return sign ? ret : -ret;
    }
};
go
func divide(dividend int, divisor int) int {
    sign := (dividend < 0) == (divisor < 0)
    a := dividend
    b := divisor
    if a < 0 {
        a = -a
    }
    if b < 0 {
        b = -b
    }
    ret := 0
    for a >= b {
        subVal := b
        times := 1
        for a >= (subVal<<1)  {
            subVal = subVal << 1
            times = times << 1
        }
        a = a - subVal
        ret = ret + times
    }
    if sign {
        return ret
    }
    return -ret
}
js
/**
 * @param {number} dividend
 * @param {number} divisor
 * @return {number}
 */
var divide = function(dividend, divisor) {
    const sign = (dividend < 0) === (divisor < 0)
    let a = dividend < 0 ? -dividend : dividend
    let b = divisor < 0 ? -divisor : divisor
    let ret = 0
    while (a >= b) {
        let subVal = b
        let times = 1
        while (a >= (subVal << 1)) {
            subVal = subVal << 1
            times = times << 1
        }
        a -= subVal
        ret += times
    }
    return sign ? ret : -ret
};
py
class Solution(object):
    def divide(self, dividend, divisor):
        """
        :type dividend: int
        :type divisor: int
        :rtype: int
        """
        sign = (dividend < 0) == (divisor < 0)
        a = -devidend if dividend < 0 else dividend
        b = -divisor if divisor < 0 else divisor
        ret = 0
        while a >= b:
            subVal, times = b, 1
            while a >= (subVal << 1):
                subVal = subVal << 1
                times = times << 1
            a -= subVal
            ret += times
        return ret if sign else -ret