问题描述:对于正整数p,N,将 p 向上取整得到 N 的最小整数倍。
最先想到的方法可能是:
(下面说到的相除运算"/"均是整除运算)
f(p) = ((p / N) + (0 == (p % N)) ? 0 : 1) * N;(1)
另一种方法:
f(p) = ((p + N - 1) / N) * N;(2)
这个方法的思路是:直接通过数学运算得到(1)式中((0 == (p % N) ? 0 : 1))的结果;方法就是:把余数 (p % N) 加上 (N - 1) 然后整除以 N,得到的结果可不就是(1)式中((0 == (p % N) ? 0 : 1))的结果!
于是有:
f(p) = ((p / N) + (0 == (p % N)) ? 0 : 1) * N; =>
f(p) = ((p / N) + (p % N + N - 1) / N) * N; =>
f(p) = ((p + N - 1) / N) * N;
编