Branched Evolution

Competitive Programming in Python

ABC 169 C - Multiplication 3

問題

$a \times b$ の小数点以下を切り捨てたものを求めよ。($a$ は $10 ^ {15}$ 以下の整数で、$b$ は小数第 $2$ 位まで与えられる。)

atcoder.jp

解説

$a$ と $b$ を浮動小数点数のまま計算すると、誤差が生じる。
例えば、$a=842184971396729, b=3.24$ のとき、正しい計算結果は $2728679307325401.96$ であるが、$2728679307325402.0$ となってしまう。
そこで、$a \times (b \times 100) \div 100$ のように計算すればよいが、今度は $b=9.79$ のとき $b\times100$ が $978.9999999999999$ のようになってしまいこれでも誤差が生じてしまう。
結局、$b$ の小数点を取り除いておき、最後に100で割ることで正しい解を得られる。

実装

a, b = input().split()
a = int(a)
b = int(b.replace('.', ''))
print(a * b // 100)

atcoder.jp