Given two integers dividend
and divisor
, divide two integers without using multiplication, division, and mod operator.
The integer division should truncate toward zero, which means losing its fractional part. For example, 8.345
would be truncated to 8
, and -2.7335
would be truncated to -2
.
Return the quotient after dividing dividend
by divisor
.
Note: Assume we are dealing with an environment that could only store integers within the 32-bit signed integer range: [−231, 231 − 1]
. For this problem, if the quotient is strictly greater than 231 - 1
, then return 231 - 1
, and if the quotient is strictly less than -231
, then return -231
.
Input: dividend = 10, divisor = 3 Output: 3 Explanation: 10/3 = 3.33333.. which is truncated to 3.
Input: dividend = 7, divisor = -3 Output: -2 Explanation: 7/-3 = -2.33333.. which is truncated to -2.
-231 <= dividend, divisor <= 231 - 1
divisor != 0
impl Solution {
pub fn divide(dividend: i32, divisor: i32) -> i32 {
if dividend == i32::MIN && divisor == -1 {
return i32::MAX;
}
let is_neg = (dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0);
let mut dividend = (dividend as i64).abs();
let divisor = (divisor as i64).abs();
let mut ret = 0;
while dividend >= divisor {
for i in 1..=32 {
if divisor << i > dividend {
dividend -= divisor << (i - 1);
ret += 1 << (i - 1);
break;
}
}
}
if is_neg {
ret = -ret;
}
ret
}
}