pub fn is_narcissistic(n: u32) -> bool {
let digit = get_digits(n as u64);
let mut v = vec![];
let mut temp_n = n;
for _ in 1..=digit {
v.push(temp_n % 10);
temp_n /= 10;
}
v.iter().fold(0u32, |a, &b| a + b.pow(digit)) == n
}
pub fn get_digits(n: u64) -> u32 {
let size_table = [
9,
99,
999,
9999,
99999,
999999,
9999999,
99999999,
999999999,
9999999999,
99999999999,
999999999999,
9999999999999,
99999999999999,
999999999999999,
9999999999999999,
99999999999999999,
999999999999999999,
9999999999999999999,
u64::max_value(),
];
((1..).find(|i| n <= size_table[*i]).unwrap() + 1) as u32
}
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
let _: Vec<_> = (1..)
.filter(|&x| is_narcissistic(x))
.take(10)
.map(|x| println!("{}", x))
.collect();
}
}