LoginSignup
1
0

More than 3 years have passed since last update.

Ruby で嵌る AtCoder ABC 169 C 浮動小数点

Last updated at Posted at 2020-05-31

はじめに

「AtCoderは、世界最高峰の競技プログラミングサイトです。
リアルタイムのオンラインコンテストで競い合うことや、
3,000以上の過去問にいつでもチャレンジすることができます。」

を利用して、プログラミングの勉強をしています。
AtCoder さん、ありがとうございます。

今回のお題

AtCoder Beginner Contets C - Multiplication 3
Difficulty: 536

今回のテーマ、浮動小数点による誤差

浮動小数点数 -WikiPedia

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

神頼みでfloorto_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_f100倍するのを諦め、小数点.の文字を削除する作戦。
$\huge{成功}$

何が良くて、何が拙かったよく分かっていないのですが、とにかく疲れました。

まとめ

  • ABC 169 C を解いた
  • Ruby に詳しくなっていない

追記
いい記事が投稿されています
浮動小数点数オタクが AtCoder Beginner Contest 169 のC問題をガチで解説してみる

1
0
6

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