巧妙实现”四舍五入“与“进一法”
阅读(193)

在C++中,当计算a/b的结果时(a,b都是整型),不管尾数是什么都会舍去。

那么如何实现“四舍五入”的方法呢?最常见的想法有:

1、读出商十分位上的数,判断是否大于或等于5,满足条件则在原来的商的基上加1.我们可以利用a%b得于余数,然后将余数乘10再来除以除数,得到原来十分位上的数。


if(a%b*10/b>4)
{
  c=a/b+1;
}
else
{
  c=a/b;
}


2.如果余数大于除数一半,那么说明商的十分位上一定大于或等于5,这个问题我们可以把它转化为比较余数的2倍和除数大小(想一想通过这样转化有什么好处?)。当余数的两数超过或等于除数时,说明十分位上的数是5或比5大小的时,这时我们在原来的商的基础上+1,否则就不变。


if(a%b*2>=b)
{
  c=a/b+1;
}
else
{
   c=a/b;
}


3.既然需要比较余数和除数一半的大小。那么我们可以将除数的一半加到被除数上,如果将除数的一半+原来的余数超过了除数,那么商就会在原来的基础上+1,否则商不变。

c=(a+(b/2))/b;
同理,我们可以得到实现“进一法”的简单方式:


c=(a+(b-1))/b
另外,C++还提供了另外的方法解决这个问题。那就是c=ceil(water);//ceil作用:返回大于或者等于指定表达式的最小整数


共有7份作业   我来完成作业
作业 等老师 解密后公开
俞悦
作业 等老师 解密后公开
吴昀帆
作业 等老师 解密后公开
徐一白
作业 等老师 解密后公开
张哲涵
作业 等老师 解密后公开
章语桐
作业 等老师 解密后公开
梁子媛
作业 等老师 解密后公开
徐一铖