题目
输入一个范围不超过
double
的浮点数,将它四舍五入再输出。(不要使用if
语句)
这是我学校信息课老师出的一道题目,我把那道题目精炼了亿点点后就成了这样。不使用if
语句是老师另加的要求,就为了锻炼我们的思维。
先不看下面的内容,独立思考一下,看看能不能实现。
thinking…
loading…
解
首先我们需要知道如果直接强行数据类型转换,C++会自动向下取整。(OK我提示到这里,(以我的经验看,)九年义务教育未结束的应该还没想出来)
既然我是初一生,那么我就以初中的传统思想——分类讨论引入:
四舍五入,我们要把小数部分分层小于等于4和大于等于5两波处理(别忘了不能使用
if
):
- 小于等于4的好说,直接强行数据类型转换就够了;
- 大于等于5的想要让它向下取整可以达到向上取整的目的的话,一般的操作是先加一,再向下取整。但是这样的话小于等于4的部分也就向上取整了,说以我们不妨少加一点(刚刚好可以让0.5进位,0.4却不行就好了)——先加0.5再向下取整
原思路来源于数学的练习题: [ x ] 表示不超过实数 x 的最大整数;若定义 { x } 表示大于实数 x 的最小整数,那么 { x } = [ x + 1 ] [x]表示不超过实数x的最大整数;若定义\{x\}表示大于实数x的最小整数,那么\{x\} = [x + 1] [x]表示不超过实数x的最大整数;若定义{x}表示大于实数x的最小整数,那么{x}=[x+1]
最终代码实现:
#include <iostream>
double x;
int main (){
scanf("%lf", &x);
printf("%d", (int)(x+0.5));
return 0;
}
最后,如果觉得这道题没什么难度的话,就可以看看后面这道题了:
链接:http://t.csdnimg.cn/WBAyI