はじめに
「AtCoderは、世界最高峰の競技プログラミングサイトです。
リアルタイムのオンラインコンテストで競い合うことや、
3,000以上の過去問にいつでもチャレンジすることができます。」
を利用して、プログラミングの勉強をしています。
AtCoder さん、ありがとうございます。
今回のお題
AtCoder Beginner Contets C - Multiplication 3
Difficulty: 536
今回のテーマ、浮動小数点による誤差
Ruby
WA1
wa1.rb
a, b = gets.split.map(&:to_f)
puts (a * b).floor
切り捨てなのでfloor
を使用するもWA
。
WA2
wa2.rb
a, b = gets.split.map(&:to_f)
puts ((a.to_i * (b * 100)) / 100).floor
100倍
してから100
で割る作戦、失敗。
WA3
wa3.rb
a, b = gets.split.map(&:to_f)
puts ((a.to_i * (b * 100)) / 100).to_i
神頼みでfloor
をto_i
にしてみる。
WA4
wa4.rb
a, b = gets.chomp.split
puts ((a.to_i * (b.to_f * 100).to_i) / 100)
標準入力からの受け取りを文字列にする作戦。
AC
ac.rb
a, b = gets.chomp.split
puts ((a.to_i * (b.gsub!('.', '').to_i).to_i) / 100)
to_f
を100倍
するのを諦め、小数点.
の文字を削除する作戦。
$\huge{成功}$
何が良くて、何が拙かったよく分かっていないのですが、とにかく疲れました。
まとめ
- ABC 169 C を解いた
- Ruby に詳しくなっていない
追記
いい記事が投稿されています
浮動小数点数オタクが AtCoder Beginner Contest 169 のC問題をガチで解説してみる