ABC345 B問題の解説(Python)

はじめに

AtCoder Beginner Contest(略称:ABC)とは、AtCoderが開催している、競技プログラミングコンテストのことです。

今回はABC345のB問題を解説していきます。

ABC345 B – Integer Division Returns

問題

問題

整数 X を 10 で割り、小数点以下を切り上げた値を求める問題です。

制約

  • \(-10^{18} \leqq X \leqq 10^{18}\)

思考の筋道

Pythonでは切り上げが行える math.ceil 関数があります。

しかし、math.ceil(x / 10) では、x / 10 で計算誤差が発生し、それにより正しい答えを得られない可能性があります。

そのため、x / 10 ではなく x // 10 を使う方法を考えましょう。

xが10で割り切れるかどうかで場合分けします。割り切れる場合は、商が答えになります。割り切れない場合は、商に1足したものが答えになります。これで、切り上げの処理を表現できています。

10で割り切れる場合の具体例

x = 30 のとき
30÷10=3
割り切れるので、そのまま3

10で割り切れない場合の具体例

x = 35 のとき
35÷10=3余り5
余りが発生しているので、3+1=4

なお、別解として、(x + 9)を10で割った商を答えとする方法もあります。この解法だと、場合分けが不要になります。

コード

X = int(input())

if X % 10 == 0:
    print(X // 10)
else:
    print(X // 10 + 1)

リンク