BETA

初心者日記(5)『AtCoder (Multiplication 3)を解く』

投稿日:2020-06-13
最終更新:2020-06-24

次のAtCoder Biginner Contestは『14の日曜日、21時』から。土曜日だとバイトで参加できなかったからありがたい。AとBは正解して、Cも解けたらいいなぁ。

来たるコンテストに備えて過去問を解く。しかしABC169のC『Multiplication 3』にボコられる。(毎回ボコられてるけど)

問題は『A * B の答えを切り捨てて出力、B は小数第2位まで与えられる』。とてもシンプル。

import math  
a,b = map(float,input().split())  
print(math.floor(a * b))  

最近よく使う math を import して、掛け算した答えを math.floor で切り捨てれば正解!にならなかった。なぜかテストケースの5つが『WA』になっている。

特にコードの問題が思いつかなかったので、『テストケース』から間違えた問題の in を入力してみる。
(画像はhand_01の出力結果)

out を確認すると、1つ数字が大きいらしい。切り捨てしてくれていない...?
確認のために a * b を 出力することにする。

import math  
a,b = map(float,input().split())  
print(a * b)  


この時点で妖怪1大きいみたいだ。1 * 9.99 の答えが 9.99 にならないあたり、何か別の策を考えないといけない。

検索した結果、『decimal』が出てきた。decimal だと小数点の計算を正確にできるようだ。もっと早く知りたかった...

from decimal import Decimal  
import math  
a,b = input().split()  
print(math.floor(int(a) * Decimal(b)))  

Decimal...今日からデシマルちゃんって呼ぼ。デシマルちゃんは文字列じゃないとエラーが起きた。文字列としてインプットした後に Decimal() で正確な小数点の計算ができるっぽい。今回は小数点の b に、a は int で整数値にするのを忘れてはいけない。
これでAC!本番にこのデシマルちゃんのような知らないやつ出てきたら不安だなぁ。

追記:途中に話した『テストケース』、過去すぎるとテストケースが存在してない場合がある。その場合気合で原因を突き止めなければならない。一つだけ『RE』で原因が分からず、絶望して適当に入力したケースがエラー起こって、嬉し過ぎて謎のダンス躍ってしまった。エラーが起きるケースもちゃんと理解できるようにしないとなぁ。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

tnodino(つのでぃの)のブログ。日頃の内容を記事にしています。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう