feat: add initial implementation of Cargo.toml, Cargo.lock, and lib.rs for divide_two_integer function
This commit is contained in:
parent
d3694c009a
commit
3be9a07d85
7
29_divide_two_integer/Cargo.lock
generated
Normal file
7
29_divide_two_integer/Cargo.lock
generated
Normal file
@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "divide_two_integer"
|
||||
version = "0.1.0"
|
6
29_divide_two_integer/Cargo.toml
Normal file
6
29_divide_two_integer/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "divide_two_integer"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
58
29_divide_two_integer/src/lib.rs
Normal file
58
29_divide_two_integer/src/lib.rs
Normal file
@ -0,0 +1,58 @@
|
||||
pub struct Solution;
|
||||
|
||||
impl Solution {
|
||||
/// - Dividend = Quotient * Divisor + Rem
|
||||
/// - Rem < Divisor
|
||||
pub fn divide(mut dividend: i32, mut divisor: i32) -> i32 {
|
||||
if divisor == i32::MIN {
|
||||
return if dividend == i32::MIN { 1 } else { 0 };
|
||||
}
|
||||
|
||||
let is_positive = dividend.is_positive() == divisor.is_positive();
|
||||
|
||||
let mut is_overflow = false;
|
||||
if dividend == i32::MIN {
|
||||
is_overflow = true;
|
||||
dividend += 1;
|
||||
}
|
||||
|
||||
dividend = dividend.abs();
|
||||
divisor = divisor.abs();
|
||||
|
||||
if dividend < divisor {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let mut quotient = 0;
|
||||
let mut rem;
|
||||
loop {
|
||||
let mut exp = 1;
|
||||
while divisor << exp <= dividend && divisor << exp > 0 {
|
||||
exp += 1;
|
||||
}
|
||||
exp -= 1;
|
||||
|
||||
quotient += 1 << exp;
|
||||
rem = dividend - (divisor << exp);
|
||||
if rem < divisor {
|
||||
break;
|
||||
}
|
||||
|
||||
dividend = rem;
|
||||
}
|
||||
|
||||
if is_overflow && rem + 1 >= divisor {
|
||||
if is_positive {
|
||||
if quotient == i32::MAX {
|
||||
quotient
|
||||
} else {
|
||||
quotient + 1
|
||||
}
|
||||
} else {
|
||||
-quotient - 1
|
||||
}
|
||||
} else {
|
||||
if is_positive { quotient } else { -quotient }
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user