0
0

More than 1 year has passed since last update.

【Ruby】条件演算子

Posted at

※初心者向け
※アウトプット練習の為
※学習の復習

開発環境
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の倍数との差分を導出する必要がある」という点です。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0