2012-08-09 14 views
6

私はしばしば自分自身のようなものを計算する必要が見つけx =(y/n)+(y%n?1:0)を計算するよりエレガントな方法はありますか?</p> <p><code>x = (y/n) + (y % n ? 1 : 0);</code></p> <p>以上の明示:プログラミングながら

x = y/n; 
if (y % n != 0) { 
    x = x + 1; 
} 

は、この値を達成するために、よりエレガントな方法はありますか?条件式を使用せずに達成できますか?

+0

yまたはnは負の値ですか?あなたのモデルでは、整数の除算はゼロに向かって丸めますか、または負の無限大に丸めますか? – Kevin

+0

@ケビン:yとnは常に正です。技術的には、私はそれがゼロに向かっているだろうと思う。 – grieve

答えて

14

したがって、整数の除算を下げるのではなく切り上げたいとします。あなたは、分子にn-1を追加することによって、この偽のことができます:

x = (y + n - 1)/n; 

あなたはそれがあなたの望ましい結果を与えるためにちょうど十分に切り捨てられます値をシフトするこの方法。

+2

'n'または' y'が大きい場合、オーバーフロー/ラッピングの問題が発生する可能性があることに注意してください。 –

関連する問題