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 } #}