配列内での掛け算(標準入力)
3 つの整数がスペース区切りで与えられます。
3 つの整数を掛け算した数値を出力して下さい。
例えば
4 10 5
この場合 4 × 10 × 5 で
200
と出力して下さい。
やり方.1
numbers = gets.split(' ').map(&:to_i)
a = 1
numbers.each do |number|
a = a * number
end
puts a
解説
numbers = gets.split(' ').map(&:to_i)
・ getメソッドで入力要素を呼び出す
・ splitメソッドで文字列をカンマ区切りで分割する
・ mapメソッドで要素を1つづつ取り出しto_i
で整数に変換する
a = 1
numbers.each do |number|
a = a * number
end
・ a=1
でaに1を代入する(初期値)
・ numbersの要素をnumber変数に代入して下の処理を繰り返す
やり方.2
injectメソッドのやり方
numbers = gets.split(' ').map(&:to_i).inject(:*)
puts numbers
injectメソッド(配列の合計を算出するメソッド)
injectはeachやmapと同じように繰り返しを行うメソッドです。
ブロックを使って繰り返し計算を行うことが特徴で、
配列オブジェクト.inject {|初期値, 要素| ブロック処理 }
のように記述します。
繰り返し順にブロックの要素が配列分加算されていき、ブロックの処理にて計算を行っていきます。
###injectにシンボルを使って演算子を指定する
injectに演算子をシンボルで渡すことで、よりスタイリッシュにinjectを書くことができます。
例えば、
-
配列の中身の合計を算出したい
-
全部掛け合わせた値を計算したい
-
配列の中身を使って順番に引き算をしたい
-
などさまざまな場面で使用可能です。
array = 1..6
p array.inject(:+) #配列の要素をすべて足す
p array.inject(3,:+) #初期値3に対して、配列の要素をすべて足す
p array.inject(:*) #配列の要素をすべて掛ける
p array.inject(3,:*) #初期値3に対して、配列の要素をすべて掛ける
p array.inject(100,:-) #100からarrayの合計値を引く
[実行結果]
21
24
720
2160
79
やり方.3
nums = gets.split(' ')
puts nums[0].to_i * nums[1].to_i * nums[2].to_i
まとめ
コメントでご指摘してくださったinjectメソッドを用いたやり方の方がスマートで簡単に計算ができますね!
コメントありがとうございました。