向上取整

在C语言中,取整操作总是把小数部分截断。因此当操作数为正的时候,相当于向下取整。

以下讨论的方法都是操作数为正的情况,操作数为负和浮点数的情况不作讨论。

方法一:检查余数

int func1(int x, int n)
{
    int sum = x / n;
    if( x % n )
    {
        sum++
    }
    return sum;
}

方法二:增加一点小处理(推荐)

int func1(int x, int n)
{
    return ( (x+n-1)/n );
}

证明

  1. 如果x能被n整除,设x=kn,k为整数,即x为n的整数倍。则(x+n-1)/n=(kn+n-1)/n=((k+1)n-1)/n,此时分子没有达到n的k+1倍,但大于等于n的k倍。默认计算取下整则为k。符合要求。
  2. 如果x不能被n整除,设x=kn+m,k为整数,m为整数且0<m<n。则(x+n-1)/n=(kn+m+n-1)/n=((k+1)n+m-1)/n。此时分子的大于等于(k+1)n,小于(k+2)n。按照默认计算应该为k+1。符合要求。

这种方法的问题是如果x和n都比较大的情况下,可能会产生溢出

方法三

(int)(((float)x/(float)n)+0.9))

 

参考:

https://www.cnblogs.com/xuhj001/p/3398608.html

https://www.jianshu.com/p/29ce2fb998b4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值