Armstrong Numbers

1. Readme

水仙花数

一个Armstrong number是一个数字,它是自身每个单数字与数字量的幂,之和。

例如:

  • 9 是水仙花数,因为9 = 9^1 = 9
  • 10 不是一个水仙花数,因为10 != 1^2 + 0^2 = 1
  • 153 是水仙花数,因为:153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
  • 154 不是一个水仙花数,因为:154 != 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190

写一些代码来确定一个数字是否水仙花数.

资源

维基百科https://en.wikipedia.org/wiki/Narcissistic_number

2. 开始你的表演

pub fn is_armstrong_number(num: u32) -> bool {
   unimplemented!("true if {} is an armstrong number", num)
}

3. 测试代码查看


# #![allow(unused_variables)]
#fn main() {
#[test]
fn test_single_digit_numbers_are_armstrong_numbers() {
   assert!(is_armstrong_number(5))
}

#[test]
//#[ignore]
fn test_there_are_no_2_digit_armstrong_numbers() {
   assert!(!is_armstrong_number(10))
}

#[test]
//#[ignore]
fn test_three_digit_armstrong_number() {
   assert!(is_armstrong_number(153))
}

#[test]
//#[ignore]
fn test_three_digit_non_armstrong_number() {
   assert!(!is_armstrong_number(100))
}

#[test]
//#[ignore]
fn test_four_digit_armstrong_number() {
   assert!(is_armstrong_number(9474))
}

#[test]
//#[ignore]
fn test_four_digit_non_armstrong_number() {
   assert!(!is_armstrong_number(9475))
}

#[test]
//#[ignore]
fn test_seven_digit_armstrong_number() {
   assert!(is_armstrong_number(9926315))
}

#[test]
//#[ignore]
fn test_seven_digit_non_armstrong_number() {
   assert!(!is_armstrong_number(9926316))
}

#}

4. 答案


# #![allow(unused_variables)]
#fn main() {
pub fn is_armstrong_number(num: u32) -> bool {
   let s = format!("{}", num);
   let l = s.len();
   s.chars()
       .map(|c| c.to_digit(10).unwrap().pow(l as u32))
       .sum::<u32>() == num
}

#}



填充/相关