なぜABC 406のB問題はLog10で不正解?

目次

ABC 406 は、A と B 問題のみ正解できた。しかし B 問題の Log を使った判定方法で不正解になった原因を理解できないのでメモ。


問題 B - Product Calculator

与えられた数列を順番に掛け算してゆき、最終的な計算結果を求める問題。ただし計算機には表示可能な桁数$K$があり、その桁数を超えると結果が 1 になるという制限がつく。

方法

桁数を調べるには、$Log_{10}$を使うのが簡単。例えば 1000 の桁数は、$Log_{10}{10000} = 4$となる。そこで$Log_{10}$が$K$以上になったら桁溢れと判断できる。

ABC406_b.py
import math

n, k = map(int, input().split())
a = list(map(int, input().split()))

display = 1
for i in a:
    display *= i
    if math.log10(display) >= k:
        display = 1
print(display)

しかし、これでは不正解となってしまった。

そこで単純に表示可能な桁数の最大値を超えているかで判断して正解に持っていった。

ABC406_b.py
n, k = map(int, input().split())
a = list(map(int, input().split()))

display = 1
for i in a:
    display *= i
    if display > 10 ** k - 1:
        display = 1
print(display)

何か Log10 を使う場合に見落としているケースがあるのだと思うが、それがなにか分からない。