summary refs log tree commit diff stats
path: root/rust/armstrong-numbers/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/armstrong-numbers/src/lib.rs')
-rw-r--r--rust/armstrong-numbers/src/lib.rs16
1 files changed, 15 insertions, 1 deletions
diff --git a/rust/armstrong-numbers/src/lib.rs b/rust/armstrong-numbers/src/lib.rs
index 41de1c3..370cbf3 100644
--- a/rust/armstrong-numbers/src/lib.rs
+++ b/rust/armstrong-numbers/src/lib.rs
@@ -1,3 +1,17 @@
 pub fn is_armstrong_number(num: u32) -> bool {
-    unimplemented!("true if {} is an armstrong number", num)
+    if num == 0 {
+        return true;
+    }
+
+    let len = (num as f32).log10() as u32 + 1;
+
+    let mut arms = 0;
+    let mut tmp = num;
+    while tmp != 0 {
+        let rem = tmp % 10;
+        arms += rem.pow(len);
+        tmp /= 10
+    }
+
+    return arms == num;
 }