【GESP】C++一级练习BCQM3047,浮点计算,四舍五入
回到一级浮点数计算的题,不过这次多了一个小小的难点就是到十位的四舍五入。需要自己处理一下。
BCQM3047
题目要求
描述
输入机票原价(3 到 4 位的正整数,单位:元),再输入机票打折率(小数点后最多一位数字)。编程计算打折后机票的实际价格(单位:元。计算结果要将个位数四舍五入到十位数“元”)。
输入
一行两个数 x,z (100≤x≤104,1.0≤z≤9.9),x 为整数,表示机票原价。z为小数后含有一位数字的实数,表示打折率。
输出
一个正整数,表示打折后的机票价格。
输入样例
888 7.7
输出样例
680
题目分析
对于初学者来说,本题主要考察两个知识点:
折扣计算: 折扣率 $z$(例如 7.7)表示价格是原价的 $z \div 10$。公式为:
实际价格 = 原价 * z / 10。四舍五入到十位: 题目要求“个位数四舍五入到十位数”。我们可以利用“除法缩小,加 0.5 取整,再乘法还原”的技巧来实现:
- 第一步(缩小):将计算出的价格除以 10。这样原来的“个位”就变成了小数点后的第一位(十分位)。
- 第二步(四舍五入):利用
(int)(数值 + 0.5)的方法。- 如果十分位 $\ge 5$,加上 0.5 后会进位,取整后就达到了“五入”的效果。
- 如果十分位 $< 5$,加上 0.5 后不会进位,取整后就是“四舍”。
- 第三步(还原):将取整后的结果乘回 10,得到最终的整十数。
例如:
683.76-> 除以 10 变68.376-> 加 0.5 变68.876-> 取整变68-> 乘 10 变680。685.00-> 除以 10 变68.500-> 加 0.5 变69.000-> 取整变69-> 乘 10 变690。
代码参考
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x; // 输入机票原价
double z;
cin >> z; // 输入折扣率
double temp_price;
// 计算打折后的金额
// 注意 z 是折扣(例如 7.7 折是 0.77 倍),所以要除以 10
temp_price = x * z / 10;
int temp;
// 核心逻辑:四舍五入到十位
// 技巧:先除以 10,加上 0.5 利用整数强制转换实现四舍五入,再乘回 10
temp = temp_price / 10 + 0.5;
cout << temp * 10; // 输出最终整十的结果
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
本文由作者按照 CC BY-NC-SA 4.0 进行授权
