OneCoder Avatar
OneCodercoderli.com · 962 篇博文
一级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【GESP】C++一级练习BCQM3047,浮点计算,四舍五入

📅 2024-10-10·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#基础语句

回到一级浮点数计算的题,不过这次多了一个小小的难点就是到十位的四舍五入。需要自己处理一下。

BCQM3047

题目要求

描述

输入机票原价(3 到 4 位的正整数,单位:元),再输入机票打折率(小数点后最多一位数字)。编程计算打折后机票的实际价格(单位:元。计算结果要将个位数四舍五入到十位数“元”)。

输入

一行两个数 x,z (100≤x≤104,1.0≤z≤9.9),x 为整数,表示机票原价。z为小数后含有一位数字的实数,表示打折率。

输出

一个正整数,表示打折后的机票价格。

输入样例

888 7.7

输出样例

680


题目分析

对于初学者来说,本题主要考察两个知识点:

  1. 折扣计算: 折扣率 zz(例如 7.7)表示价格是原价的 z÷10z \div 10。公式为:实际价格 = 原价 * z / 10

  2. 四舍五入到十位: 题目要求“个位数四舍五入到十位数”。我们可以利用“除法缩小,加 0.5 取整,再乘法还原”的技巧来实现:

  • 第一步(缩小):将计算出的价格除以 10。这样原来的“个位”就变成了小数点后的第一位(十分位)。
  • 第二步(四舍五入):利用 (int)(数值 + 0.5) 的方法。
    • 如果十分位 5\ge 5,加上 0.5 后会进位,取整后就达到了“五入”的效果。
    • 如果十分位 <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

代码参考

C++ 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;
}

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

读者讨论与留言

0 条讨论
✨ 支持点击留言直接回复 · Markdown 引用格式
💬 还没有读者留言,快来成为第一个讨论者吧!