問題
テクノロジ系
問78 関数 checkDigit は,10進9桁の整数の各桁の数字が上位の桁から順に格納された整数型の配列 originalDigit を引数として,次の手順で計算したチェックデジットを戻り値とする。プログラム中のaに入れる字句として,適切なものはどれか。ここで,配列の要素番号は1から始まる。 〔手順〕 (1)配列 originalDigit の要素番号1~9の要素の値を合計する。 (2)合計した値が9より大きい場合は,合計した値を10進の整数で表現したときの各桁の数字を合計する。この操作を,合計した値が9以下になるまで繰り返す。 (3)(2)で得られた値をチェックデジットとする。
選択肢
- ア
- イ
- ウ
- エ
解説
正解:イ
概要
配列に格納された9桁の各数字を合計し,合計が2桁になった場合はその各桁をさらに足して1桁(チェックデジット)にする処理を問う問題です。
正解の理由
while内ではjが2桁(10〜81)になり得るので,jを十の位と一の位の和に更新すればよいです。kはj÷10の商(十の位)なので,一の位はj−10×kとなり,j←k+(j−10×k)が正解です。
各選択肢の解説
ア(×): j←j−10×kは一の位だけを取り出す式で,十の位kを加えないため各桁の和にならず誤りです。
イ(〇): j←k+(j−10×k)は十の位kと一の位(j−10×k)を足して各桁の和にする式なので正しいです。
ウ(×): j←k+(j−10)×kは一の位の取り方が誤っており,桁和にならないため誤りです。
エ(×): j←k+jは元のjに十の位を足すだけで桁和にならず,値が大きくなる方向なので誤りです。
ポイント
2桁の数jの各桁の和は「十の位(j÷10の商)+一の位(j−10×(j÷10の商))」で求めます。