C语言的几种取整方法

简介: C语言的几种取整方法 来源:http://blog.sina.com.cn/s/blog_4c0cb1c001013ha9.html 1、直接赋值给整数变量。如: int i = 2.5; 或 i = (int) 2.5; 这种方法采用的是舍去小数部分 2、C/C++中的整数除法运算符“/”本身就有取整功能(int / int),但是整数除法对负数的取整结果和使用的C编译器有关。

C语言的几种取整方法

来源:http://blog.sina.com.cn/s/blog_4c0cb1c001013ha9.html

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

.

因为'/'是往下取整的。

 

相关文章
|
1月前
|
C语言
你知道C语言中实现有序序列并序输出的2种方法吗?
你知道C语言中实现有序序列并序输出的2种方法吗?
|
1月前
|
C语言
【C语言】大小写字母的相互转化:多种方法解析及原理说明
【C语言】大小写字母的相互转化:多种方法解析及原理说明
98 0
|
6月前
|
C语言
C语言之使用递归的方法求n的阶乘
C语言之使用递归的方法求n的阶乘
150 0
|
6月前
|
存储 C语言 C++
C语言之数据的存储2(浮点数在内存中如何存储,如何输出,查看不同类型数据在内存中表示的范围的方法,十进制浮点数转化为二进制的方法)
C语言之数据的存储2(浮点数在内存中如何存储,如何输出,查看不同类型数据在内存中表示的范围的方法,十进制浮点数转化为二进制的方法)
|
21天前
|
编译器 C语言
【C语言】字母转换大小写的三种方法
【C语言】字母转换大小写的三种方法
37 0
|
1月前
|
存储 C语言 索引
C语言数组求和方法
C语言数组求和方法
51 0
|
6月前
|
C语言
C语言之字符串的连接使用指针和调用函数两种方法
C语言之字符串的连接使用指针和调用函数两种方法
206 0
|
3月前
|
存储 移动开发 搜索推荐
利用C语言实现十大经典排序算法的方法
利用C语言实现十大经典排序算法的方法
26 1
|
4月前
|
C语言
C语言第四十八弹---多种方法模拟实现strlen函数
C语言第四十八弹---多种方法模拟实现strlen函数
|
4月前
|
C语言
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标