Namaran

Code daily. Without assist.

2026-09-21

digital_root.rs

// write this: repeatedly replace n with the sum of its digits until n is a
// single digit (0..=9), then return it. Use `loop` with `break` for the
// termination check -- `loop` itself never stops on its own.
fn digital_root(mut n: u32) -> u32 {
}

digital_rootを実装してください。nが1桁になるまで、各桁の和で置き換え続けます(例: 383+8=111+1=2)。

Reference
fn digital_root(mut n: u32) -> u32 {
    loop {
        if n < 10 {
            break n;
        }
        let mut sum = 0;
        while n > 0 {
            sum += n % 10;
            n /= 10;
        }
        n = sum;
    }
}

loop自体は終了条件を持たないので、「1桁になったかどうか」の判定(n < 10)を自分で書き、満たしたらbreak nで抜けて値を返します。この判定を書き忘れると、nが更新され続けるだけで永遠にbreakされない無限ループになります。内側のwhileは「各桁を取り出して足す」という別の終了条件(n > 0)を持つ、独立した繰り返しです。これは参考実装であり、唯一の正解ではありません。