問題.1
3桁の正の整数を入力します。その整数の「百の位・十の位・一の位の和」について、
10の倍数(10,20,30...)からの差が
・2以内であるときは"True"
・それ以外は"10の倍数との差は○です"
と表示されるようにしましょう。
[自分の解答]
def near_ten(num) place_3 = (num/100) % 10 place_2 = (num/10) % 10 place_1 = (num/1) % 10 sum = place_3 + place_2 + place_1 if (sum % 10) <= 2 || (sum % 10) >= 8 puts "True" else puts "10の倍数との差は#{10 - (sum % 10)}です" end end
前回解いた記述とほとんど同じになった。
正答との差が結構あるので、正答をしっかり読み解いていく。
[正答]
def near_ten(num) total = (num/100 % 10) + (num/10 % 10) + (num % 10) remainder = total % 10 if remainder <= 2 || remainder >= 8 puts "True" elsif remainder <= 5 puts "10の倍数との差は#{remainder}です" else puts "10の倍数との差は#{10 - remainder}です" end end
totalでそれぞれの桁の合計値。
remainderにtotalを10で割った時の余りを代入。
このreminderの値によって条件を分岐させる。
しかし、正直言ってelsifの記述の必要性は感じない。
10からreminderを引いた値が10の倍数との差になるため。