From b271920131c71d8657c050bec7858432a51e9598 Mon Sep 17 00:00:00 2001 From: Coin de Gamma Date: Thu, 9 Mar 2023 06:42:17 +0000 Subject: [PATCH] 016 ok --- 016/main.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 016/main.rs diff --git a/016/main.rs b/016/main.rs new file mode 100644 index 0000000..7846259 --- /dev/null +++ b/016/main.rs @@ -0,0 +1,54 @@ +struct Num { rdigits: Vec } + +impl Num { + pub fn from(s: &String) -> Num { + let rd: Vec = s.chars().rev() + .map(|c| String::from(c).parse::().unwrap()) + .collect(); + Num { rdigits: rd } + } + pub fn add(&self, n: &Num) -> Num { + let mut xs = self.rdigits.clone(); + let mut ys = n.rdigits.clone(); + let mut rs: Vec = Vec::new(); + + while xs.len() < ys.len() { xs.push(0); } + while ys.len() < xs.len() { ys.push(0); } + + let mut rm = 0u8; + for (a, b) in xs.iter().zip(ys.iter()) { + if a + b + rm > 9 { + rs.push((a + b + rm) - 10); + rm = 1u8; + } else { + rs.push(a + b + rm); + rm = 0u8; + } + } + if rm > 0 { rs.push(1u8); } + + Num { rdigits: rs } + } + pub fn print(&self) { + for c in self.rdigits.iter().rev() { print!("{}", c); }; + println!(""); + } + pub fn sum(&self) -> u32 { + let mut res = 0u32; + for c in self.rdigits.iter() { res += *c as u32; } + res + } +} + + +fn main() { + let mut n = Num::from(&String::from("1")); + + for _i in 0..1000 { + n = n.add(&n); + } + n.print(); + //println!("-----------"); + println!("[{}]", n.sum()); + +}