C语言正整数除法向上取整

在网上发现一个简单的向上取整方法;
这里我们用<>表示向上取整,[]表示向下取整,那么怎么来表示这个值呢?
我们可以证明:
<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


原文链接:【向上取整/向下取整】C语言向上或向下取整 函数

注:本文只是截取了原文的一部分

posted on 2013-08-04 23:55  FlowingCloud  阅读(6046)  评论(0编辑  收藏  举报

导航