牛客刷题 | 向上取整

方法一:检查余数

(个人建议采用这种方法,因为一般不会出错)

    if(temp%k == 0)
        result = temp/k;
    else
        result = (temp/k)+1;

方法二:数学思想

(推荐,但是可能溢出)

    int result = (temp - 1)/k + 1;
    //等价于
    int result = (temp + k - 1)/k;
    //第一句代码中的1换成(k/k)就得到第二句代码了
    //可以自己带入数字检验一下

方法三:

(不推荐,可能会因为精度问题而出错)

    //注意!!!
    //ceil()函数返回的是double型,所以用强制转换
    int result = (int) ceil(temp*1.0/k);
    

此方法精度丢失可能在极端条件下出现,但是一旦出现,我们很难排查出这个隐式bug。

举个例子:  
假设某两个数的ceil计算结果原本是2.0,但由于精度问题,ceil结果其实是1.9999999999999999999999999  
在结果转为int型数据时,发生了精度丢失,计算结果由2.0转换为1  
总结:在任何可能与浮点数进行比较或者整形与浮点型之间进行类型转换的地方都必须特别注意!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值