競プロに関するSosomeKasuのブックマーク (1)

  • C++でa/bの除算の切り上げが(a+(b-1))/bでできる理由

    メモ的な記事になります。 除算の際に式を(a+(b-1))/bとする(a、bは整数型)ことで、除算の結果の切り上げができるということが感覚的にすぐには理解できませんでした。時間をかけて一応は理解したので、それについて記しておきます。 まず、整数型で除算を行なった場合、デフォルトでは、切り捨てになります。例えば、a=9、b=2であれば、9/2=4.5で計算結果は切り捨てとなるため4となります。ここで、切り捨てではなく、切り上げで除算を行いたい場合、 (a+(b-1))/bとすれば、除算の結果を切り上げで計算できます。a、bに先ほどと同様の値を用いると、(9+(2-1))/2=(9+1)/2=5となります。この場合は5ぴったりになりましたね。他にもa=11、b=3の場合、(11+(3-1))/3=(11+2)/3=13/3≒4.33となります。そして、計算結果は切り捨てなので、4になりますね。

    C++でa/bの除算の切り上げが(a+(b-1))/bでできる理由
  • 1