小练一下思维——不使用if四舍五入(C++)

题目

输入一个范围不超过double的浮点数,将它四舍五入再输出。(不要使用if语句)

这是我学校信息课老师出的一道题目,我把那道题目精炼了亿点点后就成了这样。不使用if语句是老师另加的要求,就为了锻炼我们的思维。
先不看下面的内容,独立思考一下,看看能不能实现。



thinking…



loading…



首先我们需要知道如果直接强行数据类型转换,C++会自动向下取整。(OK我提示到这里,(以我的经验看,)九年义务教育未结束的应该还没想出来)
既然我是初一生,那么我就以初中的传统思想——分类讨论引入:

四舍五入,我们要把小数部分分层小于等于4大于等于5两波处理(别忘了不能使用if):

  1. 小于等于4的好说,直接强行数据类型转换就够了;
  2. 大于等于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

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值