diff --git a/1017_convert_to_base_negative_2/Cargo.lock b/1017_convert_to_base_negative_2/Cargo.lock new file mode 100644 index 0000000..a37234c --- /dev/null +++ b/1017_convert_to_base_negative_2/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "convert_to_base_negative_2" +version = "0.1.0" diff --git a/1017_convert_to_base_negative_2/Cargo.toml b/1017_convert_to_base_negative_2/Cargo.toml new file mode 100644 index 0000000..0e671cf --- /dev/null +++ b/1017_convert_to_base_negative_2/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "convert_to_base_negative_2" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/1017_convert_to_base_negative_2/src/lib.rs b/1017_convert_to_base_negative_2/src/lib.rs new file mode 100644 index 0000000..5e05512 --- /dev/null +++ b/1017_convert_to_base_negative_2/src/lib.rs @@ -0,0 +1,27 @@ +pub struct Solution; + +impl Solution { + pub fn base_neg2(mut n: i32) -> String { + let mut rems: Vec = vec![]; + + loop { + let mut r = n % -2; + n /= -2; + + // n * Q + r = n * (Q + x) + (r - n) + // => x = 1 + if r < 0 { + r += 2; + n += 1; + } + + rems.push(if r == 0 { '0' } else { '1' }); + + if n == 0 { + break; + } + } + + rems.iter().rev().collect() + } +}