四捨五入

Decimal

decimal --- 十進固定及び浮動小数点数の算術演算 — Python 3.10.6 ドキュメント

例題

B - Broken Rounding

from decimal import Decimal, ROUND_HALF_UP

X, K = map(int, input().split())

for i in range(K):
    X = int(Decimal(X).quantize(Decimal('1E' + str(i + 1)), rounding=ROUND_HALF_UP))

print(X)


自分で実装する

四捨五入の操作を自分で実装するほうが簡単なこともある.

例題

B - Broken Rounding
【素直な操作】
手計算するときの四捨五入を真面目に実装する.

X, K = map(int, input().split())

def f(x, i):
    x //= 10 ** i
    q, r = divmod(x, 10)
    if r >= 5:
        return (q + 1) * (10 ** (i + 1))
    else:
        return q * (10 ** (i + 1))

for i in range(K):
    X = f(X, i)

print(X)

【予め繰り上げておく】
四捨五入する位に5を足してから,その位を切り捨てる.

X, K = map(int, input().split())

def f(x, i):
    x += 5 * (10 ** i)
    x //= 10 ** (i + 1)
    x *= 10 ** (i + 1)
    return x

for i in range(K):
    X = f(X, i)

print(X)

参考記事