※初心者向け
※アウトプット練習の為
※学習の復習
開発環境
rails 6.0.4.4
ruby 2.6.5
##問題内容
3桁の正の整数を入力します。その整数の「百の位・十の位・一の位の和」について、
10の倍数(0,10,20,30...)からの差が
・2以内であるときは"True"
・それ以外は"10の倍数との差は○です"
と表示されるようにしましょう。
出力例:
near_ten(117)→True
near_ten(123)→10の倍数との差は4です
near_ten(111)→10の倍数との差は3です
0も10の倍数に含むものとします。
百の位・十の位・一の位の和が6などの時に、「10の倍数との差は6です」と出力せずに、「10の倍数との差は4です」と10の倍数から近い方の差を出力するようにしてください。
##解答
def near_ten(num)
total = (num/100) + (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
解説
(num/100) + (num/10 % 10) + (num % 10)によって、百の位・十の位・一の位をそれぞれ足し合わせています。
num/100(百の位)
2桁の整数を100で割った値が百の位になります。
num = 117の場合、num/100 つまり117/100は1.17となります。
Rubyでは整数同士(integer型)の計算だと返り値は整数になるので、小数点以下は切り捨てられて「1」になります。
そのため、百の位の取得は、3桁の数字を100で割るだけで可能となります。
よって、百の位は「1」となります。
num/10 % 10(十の位)
2桁の整数を10で割り、その値を10で割った際の余りが十の位になります。
num = 117の場合、117/10は11.7になります。整数同士は小数点以下の計算は行わないので、11になります。
11 % 10 は、11を10で割った際の余りを計算結果として返します。百の位の計算と同様に、小数点以下の計算は行わないので、余りは1となります。
よって、十の位は「1」となります。
num % 10の場合(一の位)
2桁の整数を10で割った際の余りが一の位になります。
num = 117の場合、117 % 10 は、117を10で割った際の余りを計算結果として返します。百の位の計算と同様に、小数点以下の計算は行わないので、余りは7となります。
よって、一の位は「7」になります。
8行目のelseのポイントは、「百の位・十の位・一の位の和が6または7に該当する場合は、10から差し引いて、10の倍数との差分を導出する必要がある」という点です。