1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#[cfg(test)]
mod tests {
    #[test]
    fn test_numred() {
        let mut number: u64 = 12345678901299888;
        let mut result = super::numred(&number);
        assert_eq!(9, result);
        number = 25;
        result = super::numred(&number);
        assert_eq!(7, result);
    }
}

pub fn numred(number: &u64) -> u8 {
    let v: Vec<u8> = number
        .to_string()
        .chars()
        .map(|d| d.to_digit(10).unwrap() as u8)
        .collect();
    let mut result: u8 = 0;
    for i in &v {
        result = &result + i;
        if result >= 10 {
            let r = result as u64;
            result = numred(&r);
        }
    }
    result
}