1
0

More than 3 years have passed since last update.

二桁以上の整数を入力すると、十の位と一の位の数字の足し算、十の位と一の位の数字の掛け算をそれぞれ行い、最後に2つの結果を足し合わせて出力するプログラムの作成

Last updated at Posted at 2021-09-06

初投稿。

とある日に遭遇したRuby問題。
ポイントは整数の十の位・一の位を個別の整数として出力するメソッドを理解すること。特に十の位!
模範解答だけではイマイチしっくり来なかったため、解答コードを元に解説を備忘録として。

〜今回はヒントがありました。〜
「入力された2桁以上の整数を10で割った計算結果の余りが1の位、整数を10で割ったものを更に10で割った計算結果の余りが10の位となります。」
現代文の問題かのようなヒントが記載されていましたが、要は'%'を使いなさいということですね。

def addition(a, b)
  a + b
end

def multiplication(a,b)
  a * b
end

def slice_num(num)
  # 10の位
  tens_place = (num / 10) % 10
  # 1の位
  ones_place = num % 10
  return tens_place, ones_place
end

puts "二桁の整数を入力してください"
input = gets.to_i
X, Y = slice_num(input)
add_result = addition(X, Y)
multiple_result = multiplication(X, Y)
puts "足し算結果と掛け算結果の合計値は#{add_result + multiple_result}です"

解いていく前に忘れてはいけない大前提のおさらい!
「Rubyの性質上、整数同士(integer型)の計算だと返り値は整数になるので、小数点以下は切り捨てられる。」
この前提で今回のアプトプットの8割完了です。

では実際に2桁の整数を入力して考えてみます。

qiita.rb
input = 55 の場合
slice_numメソッドに代入され、
tens_place = (55 / 10) % 10
ones_place = 55 % 10

ここで文系の私は壁にぶつかるわけです。
ones_plase = 55 % 10 すると余りは5。なるほどどんな整数が入力されても一の位は求められるわこれで。
では十の位tens_place = (55 / 10) % 10 するとそもそも5(小数点以下切り捨て)をさらに10で割って余りってなんぞ?!と。

原因は'%'の理解不足でした。
割り算では5を10で割ると0.5ですが、'%'←で割って余りを求める際の考え方は「5(10未満の数字)を10で割ると、割れない。なので5がそのまま余る」という解釈なのです。

ターミナルで実行結果を確認すると、下記の通り55でも75でも十の位が個別の整数として返ってきます。

irb(main):001:0> num = (55 / 10) % 10
=> 5
irb(main):002:0> num = (75 / 10) % 10
=> 7
irb(main):003:0> 

2桁の整数では(num / 10)の段階で十の位を求められそうな雰囲気もありますが、ここでの '/ 10'の役割はnumの十の位を1桁目に持ってくることです。その上でnum十の位より上の数字を'% 10'で排除します。
(num / 10)では3桁以上の整数が入力された場合に対応できません。ターミナルで実行結果を確認すると、

irb(main):001:0> num = (1525 / 10)
=> 152
irb(main):002:0> num = (1525 / 10) % 10
=> 2
irb(main):003:0>

となり、'% 10'を記述することで何桁の整数でも十の位を個別の整数として求めることができます。

以上。

1
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
1
0