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