概要
前回書いた記事で使用した digitsメソッド を使って3桁の整数を位ごとに分けて条件分岐をするという問題を解いてみました。前回とは少し視点が違うので理解を深めるのには良いと考え記事にさせていただきました。
目次
-
実践
- 問題
- 条件
- 解答
- 問題
-
補足
- 変数numの処理結果
- 変数sumの処理結果
-
まとめ
-
参考文献
実践
問題
3桁の整数があります。その整数の 「百の位・十の位・一の位の和」 を出力し、10の倍数との差を出力するプログラムを書いてください。
条件
- 10の倍数との差が 2 以内であれば
True
- それ以外であれば
10の倍数との差は◯です
- ただし、10の倍数との差が近い方を出力する。
解答
def near_ten_multiple(i)
num = i.digits.take(3) # 1の位, 10の位, 100の位を取得し変数numに格納
sum = (num.sum) % 10 # 3桁の合計を取得し1の位を取得
if sum <= 2 || sum >= 8 # 2以下 または 8以上のとき
p 'True'
elsif sum >= 5 # 5, 6, 7 のとき
p "10の倍数との差は#{ 10 - sum }です"
else # 3, 4 のとき
p "10の倍数との差は#{sum}です"
end
end
# メソッド呼び出し
near_ten_multiple(117) # 1 + 1 + 7 = 9
near_ten_multiple(111) # 1 + 1 + 1 = 3
near_ten_multiple(123) # 1 + 2 + 3 = 6
# ターミナル出力結果
# "True"
# "10の倍数との差は3です"
# "10の倍数との差は4です"
補足
変数num の処理結果
digits.take(3)
で引数で指定した位の数だけ1の位から順番に取得しています。今回は合計を取得したいだけなのであまり順番に関しては考慮しなくて良いですが、このような取得結果になっています。
num = i.digits.take(3)
# ターミナル出力結果
# 117 => [7, 1, 1]
# 111 => [1, 1, 1]
# 123 => [3, 2, 1]
変数sum の処理結果
sum で合計値を出したあとに % 10
をすることで 1の位を取得 しています。
たとえば、24
という数字があったとします。%10
をすると
24 ÷ 10 = 2 余り 4
になります。この余りが 1の位 になります。
sum = (num.sum) % 10
# ターミナル出力結果
# 9
# 3
# 6
まとめ
- 整数を10で割ったときの余りは 1の位 になる