向上取整的三种方法

方法1 :
检查余数法:

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

方法2:
数学思想 :

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

证明:
1.如果temp不能整除k 假如在数学当中 temp / k 这个小数位于的整数区间是[a , a + 1 ] , 那么如果此时(temp - 1) % k == 0 那么 (temp - 1)/ k = a , 再加上1就是我们所需要的b了。 如果(temp - 1 ) % k != 0 那么根据语言特性(temp - 1 ) / k = a , 仍然成立 。
2.如果temp能够整除 k 设 temp / k = a , 那么 (temp - 1 ) / k = a - 1 , 再加上1 同样是a了。

方法三: 使用 “cmath” 头文件中的ceil()函数

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值