• 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

    .

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

  • 相关阅读:
    请求参数的中文乱码问题
    MySql索引与优化
    Android 兼容包
    Mysql 主从(转)
    解决tomcat一闪而过(转)
    log4j
    支付相关
    通过maven添加quartz
    linux命令学习之:chmod
    Nginx特点及其配置
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3531257.html
Copyright © 2020-2023  润新知