天天看點

c語言除法向下取整是加一麼,【向上取整/向下取整】C語言向上或向下取整 函數...

C語言有以下幾種取整方法:

1、直接指派給整數變量。如:

int i = 2.5; 或 i = (int) 2.5;

這種方法采用的是舍去小數部分

2、C/C++中的整數除法運算符“/”本身就有取整功能(int / int),但是整數除法對負數的取整結果和使用的C編譯器有關。

3、使用floor函數。floor(x)傳回的是小于或等于x的最大整數。如:

floor(2.5) = 2

floor(-2.5) = -3

4、使用ceil函數。ceil(x)傳回的是大于x的最小整數。如:

ceil(2.5) = 3

ceil(-2.5) = -2

floor()是向負無窮大舍入,floor(-2.5) = -3;ceil()是向正無窮大舍入,ceil(-2.5) = -2。

但是在C裡面ceil和floor()函數是傳回double型,

先在網上發現一個簡單的向上取整方法;

這裡我們用<>表示向上取整,[]表示向下取整,那麼怎麼來表示這個值呢?

我們可以證明:

=[(N-1)/M]+1    (0

不失一般性,我們設N=Mk+r(0<=r

1)當r>0時,

左邊:===k+=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

左邊:=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 nn=(N-1)/M +1

.

因為‘/‘是往下取整的。

時間: 05-05