1 条题解

  • 0
    @ 2025-9-15 23:20:41

    C

    说明

    本题要求计算小明购买打折书籍后剩余的钱数,核心逻辑是“剩余金额 = 原有金额 - 书籍折后价格”。具体计算规则:

    1. 书籍原价为m元,打8折后的售价 = m × 0.8
    2. 小明剩余的钱 = 原有金额n - 书籍折后售价,即 n - m×0.8
    3. 结果需保留2位小数,通过格式化输出实现四舍五入(如计算结果为20.0,需输出20.00)。

    整个过程仅涉及一次乘法和一次减法,时间复杂度为O(1),使用double类型存储数据可保证精度。

    代码

    #include <stdio.h>
    
    int main() {
        double n, m;
        // 读取原有金额n和书籍原价m
        scanf("%lf %lf", &n, &m);
        
        // 计算剩余金额:n减去m的8折价格
        double remaining = n - m * 0.8;
        
        // 输出保留2位小数的结果
        printf("%.2f\n", remaining);
        return 0;
    }
    

    C语言拓展知识

    推荐搜索:printf中%.2f的格式化规则(如何强制显示两位小数,包括末尾的0)、double类型存储小数的精度限制、浮点数减法可能产生的精度误差及避免方法。

    C++

    说明

    本题逻辑与C语言一致(剩余金额 = 原有金额 - 折后价格),C++通过fixedsetprecision(2)控制输出格式,确保结果保留2位小数,代码更简洁,无需重复指定格式控制符。

    新知识

    1. 强制保留两位小数:
      • 术语:fixedsetprecision(2)的组合
      • 解释:fixed指定浮点数以固定小数位数形式输出,setprecision(2)设置小数位数为2,两者结合后,即使结果是整数(如20),也会显示为20.00,符合题目对输出格式的要求。
      • 对比:C语言用printf("%.2f", remaining);C++通过操纵符组合实现,格式控制更灵活,便于修改小数位数(如改为3位只需改setprecision参数)。

    AC

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        double n, m;
        // 读取n和m(double类型直接用cin读取)
        cin >> n >> m;
        
        // 计算剩余金额
        double remaining = n - m * 0.8;
        
        // 输出保留2位小数,确保显示两位小数(包括末尾0)
        cout << fixed << setprecision(2) << remaining << endl;
        return 0;
    }
    

    C++拓展知识

    推荐搜索:C++中fixed对输出格式的影响(为何能强制显示末尾0)、setprecision参数与小数位数的对应关系、浮点数在计算中的精度问题(如0.8的二进制存储误差对结果的影响)。

    • 1

    信息

    ID
    236
    时间
    1000ms
    内存
    64MiB
    难度
    6
    标签
    递交数
    149
    已通过
    47
    上传者