ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

商の求め方 余りの切り上げ

以前、Pythonの除算で余りを切り捨てて商を求める方法を記事にしました。
ebisuke33.hatenablog.com
今回は余りを切り上げる方法について記事にします。


余りの切り捨て

例えば次のように//を使うと余りを切り捨てて商である1が出力されます。

a = 3
b = 2

div_num = a // b
print(div_num)
# 1

この方法はよく使うので覚えやすかったです。


余りの切り上げ その1

この除算の答えである1.5の余りを切り上げて2を出力する方法を紹介します。
こちらの記事で詳しく解説されています。
余りは切り上げとする商の説明 - Qiita

a = 3
b = 2

div_num = (a + b - 1) // b
print(div_num)
# 2

この方法では割り切れる/割り切れないという両方の場合でも、同じシンプルなコードで余りの切り上げができます。


余りの切り上げ その2

同じ結果が得られますが次のような方法もあります。
こちらのサイトでD問題で使用されている方法です。
AtCoder ABC185 個人的メモ

a = 3
b = 2

div_num = - (-a // b)
print(div_num)

aもbも正の整数であれば、(-a // b)は負の値になります。
先に紹介したように//を使用すると余りを切り下げます。
余りが出る場合は、負の値の余りを切り下げることになるので絶対値は増加します。
よって、(-a // b)に-1をかけた値は a / b の余りの切り上げに等しくなります。



余りの切り上げ方法もいろんな種類があり、できるだけ多くの方のコードを読んで学習していきたいです。
唯一 コンテストですぐにコードが思い浮かぶか、不安です…