View on GitHub

puzzles

puzzle collections from codewars

Persistent Bugger

原题

已知函数 fn persistence(num: u64) -> u64, 该函数会求 num 各位数乘积,再求该 乘积各位数的乘积,直到乘积为只剩1位,返回计算的次数。

persistence(39) == 3 因为 3 * 9 = 27, 2 * 7 = 14, 1 * 4 = 4,一共 计算了三次,所以返回值为3. 注意 persistence(4) == 0 因为 4 不用计算。

fn persistence(num: u64) -> u64 {
    let mut count: u64 = 0;
    let mut num_str = num.to_string();
    loop {
        if num_str.len() == 1 {
            break;
        }
        count += 1;
        num_str = format!(
            "{}",
            num_str
                .chars()
                .map(|i| i.to_digit(10).unwrap() as u64)
                .fold(1, |acc, i| acc * i)
        );
    }
    count
}

知识点: