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桁になるまで、各桁の和で置き換え続けます(例: 38 → 3+8=11 → 1+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)を持つ、独立した繰り返しです。これは参考実装であり、唯一の正解ではありません。