diff options
Diffstat (limited to 'rust/armstrong-numbers/src')
| -rw-r--r-- | rust/armstrong-numbers/src/lib.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/rust/armstrong-numbers/src/lib.rs b/rust/armstrong-numbers/src/lib.rs new file mode 100644 index 0000000..41b0824 --- /dev/null +++ b/rust/armstrong-numbers/src/lib.rs | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | |||
| 2 | fn digits(mut n: u32) -> (usize,Vec<u32>) { | ||
| 3 | let mut v = vec![]; | ||
| 4 | while n > 9 { | ||
| 5 | v.push(n % 10); | ||
| 6 | n /= 10; | ||
| 7 | } | ||
| 8 | v.push(n); | ||
| 9 | (v.len(),v) | ||
| 10 | } | ||
| 11 | |||
| 12 | pub fn is_armstrong_number(num: u32) -> bool { | ||
| 13 | let (l,v) = digits(num); | ||
| 14 | v.iter().map(|x| x.pow(l as u32)).sum::<u32>() == num | ||
| 15 | } | ||
