[转载]C/C++正整数除法向上取整

结论:N/M 向上取整: (N - 1) / M + 1.

(下面是证明,可以不用看了)


以下转载自网络:

在网上发现一个简单的向上取整方法;
这里我们用<>表示向上取整,[]表示向下取整,那么怎么来表示这个值呢?
我们可以证明:
<N/M>=[(N-1)/M]+1    (0<M<=N,M,N∈Z)

不失一般性,我们设N=Mk+r(0<=r<M),
1)当r>0时,
左边:<N/M>=<(Mk+r)/M>=<k+r/M>=k+<r/M>=k+1
右边:[(N-1)/M]+1=[(Mk+r-1)/M]+1=[k+(r-1)/M]+1=k+1+[(r-1)/M]=k+1
2)当r=0
左边:<N/M>=k
右边:[(N-1)/M]+1=[(Mk-1)/M]+1=[(M(k-1)+M-1)/M]+1=[k-1+(M-1)/M]+1=k+[(M-1)/M]=k

命题得证。
有了这个公式,我们在代码里可以这样计算:

int n=(N-1)/M +1

原文地址:https://www.cnblogs.com/Gaomez/p/14188796.html