Appearance
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