(dividend: i32, divisor: i32)
| 9 | |
| 10 | impl Solution { |
| 11 | pub fn divide(dividend: i32, divisor: i32) -> i32 { |
| 12 | // deal with the only overflow case |
| 13 | if dividend == i32::min_value() && divisor == -1 |
| 14 | { return i32::max_value() } |
| 15 | let mut dvd = i64::abs(dividend as i64); |
| 16 | let dvs = i64::abs(divisor as i64); |
| 17 | let sign: i64 = if (dividend > 0) ^ (divisor > 0) { -1 } else { 1 }; |
| 18 | let mut ans = 0; |
| 19 | while dvd >= dvs { |
| 20 | let mut tmp = dvs; |
| 21 | let mut shift: i64 = 1; |
| 22 | while dvd >= (tmp << 1) { |
| 23 | tmp <<= 1; |
| 24 | shift <<= 1; |
| 25 | } |
| 26 | dvd -= tmp; |
| 27 | ans += shift; |
| 28 | } |
| 29 | (sign * ans) as i32 |
| 30 | } |
| 31 | } |
| 32 | |
| 33 | #[cfg(test)] |
nothing calls this directly
no outgoing calls
no test coverage detected