AtCoder ABC 169 B – Multiplication 2 Python解説

スポンサーリンク

Multiplication 2

N 個の整数 A1​,…,AN が与えられます。
A1​×…×AN を求めてください。
ただし、結果が 10 ^ 18 を超える場合は、代わりに -1 を出力してください。

AtCoder Beginner Contest 「Multiplication 2」

10 ^ 18を超える場合は、という何とも怖い文言が書かれています。お察しの通り、この問題では掛け算を行っていく過程で非常に大きな数値が出てきます。Pythonは10 ^ 18の数値も扱えますが、気を付けないとすぐにTLEしてしまいます。他にも、0を含んでいるときの場合分けなどが必要となる問題です。

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

result = a[0]

if 0 in a:
    print(0)
else:
    for i in range(1, len(a)):
        result *= a[i]
        if result >= 1000000000000000001:
            print(-1)
            break
    else:
        print(result)

問題自体は掛け算を行っていくだけなので、場合分けがポイントになります。
まずは、0を含んでいる場合、これは条件文の最初に見ておいたほうがよいです。0を含んでいなければ、a[i]から順に掛けていき、10 ^ 18を超えたら-1を出力してbreak、そうでなければ、resultを出力して完了です。