AtCoder ABC169
AtCoder ABC169解いた分だけまとめ。
ABC3完。BとCで結構教育的な問題が出ていい意味でしびれた。
ちなみに先日PAST受けたけど、残念ながら認定なしになってしまったので、引き続き精進します...
今の時点でのレートはこんな感じ。緑色目指してがんばるぞー
目次
A. Multiplication 1
やるだけ。以上。
ACしたコード
# coding:utf-8 a, b = map(int, input().split()) print(a * b)
B. Multiplication 2
B問題でまさかTLE出すなんて思ってもいなかった。
まっとうにfor文でひたすら掛け算してから比べたらTLEだったので、
途中結果の時点で1018を超えたら打ち切りする方向で。
また、要素に1つでも0がいればその時点で0なので、それでも打ち切る。
ACしたコード
# coding:utf-8 n = int(input()) a = list(map(int, input().split())) ans = 1 if 0 in a: print(0) exit() for i in range(n): ans = ans * a[i] if ans > 10**18: print(-1) exit() print(ans)
C. Multiplication 3
aの入力の最大値が105なので、floatで扱うと誤差で爆死する。
正確に計算したいなら、decimalの出番。
標準ライブラリだが、使う時は import decimalが必要。
ポイント
- 小数の計算を正確に計算するときはdecimalモジュールの出番
- decimalで切り捨てする時は、decimal.quantize(num, rounding=decimal.ROUND_FLOOR))
ACしたコード
# coding:utf-8 import decimal a, b = input().split() ans = decimal.Decimal(a) * decimal.Decimal(b) print(ans.quantize(decimal.Decimal('0'), rounding=decimal.ROUND_FLOOR))