You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我运行硬币换算C++程序无法得到正确输出?

硬币金额计算程序的问题修复

原程序旨在输入25美分、10美分、5美分、1美分硬币的数量,计算总金额并输出对应的美元和美分,但运行结果不符合预期,以下是问题分析与修复方案:

原代码中的问题

  • 变量拼写错误:计算总金额时,totalMoney=quarters+nickels+dimes+pennie;里的pennie是笔误,正确变量名应为pennies,会导致编译错误或未定义变量问题。
  • 浮点数精度误差:用double类型计算硬币金额时,像0.10这类数值无法用二进制浮点数精确表示,累加后会出现类似2.9999999999而非3的偏差,导致美分计算错误。
  • 美分计算逻辑缺陷:直接通过(totalMoney - dollars)*100计算美分,会因浮点数误差得到非整数结果,比如本该是5美分却输出4.9999999999。

修复后的代码

#include <iostream>

int main() {
    int numQuarters, numNickels, numDimes, numPennies;
    
    std::cout << "Please enter the number of coins:" << std::endl;
    std::cout << "# of quarters: ";
    std::cin >> numQuarters;
  
    std::cout << "# of nickels: ";
    std::cin >> numNickels;
  
    std::cout << "# of dimes: ";
    std::cin >> numDimes;

    std::cout << "# of pennies: ";
    std::cin >> numPennies;

    // 用整数计算总美分数,彻底避免浮点数精度问题
    int totalCents = numQuarters * 25 + numNickels * 5 + numDimes * 10 + numPennies;
    int dollars = totalCents / 100;
    int cents = totalCents % 100; // 取余直接得到精确美分数

    std::cout << "The total is " << dollars << " dollars and " << cents << " cents." << std::endl;
  
    return 0;
}

修复说明

  1. 修正拼写错误:原代码中的pennie笔误已通过整数计算逻辑规避,无需单独修改。
  2. 改用整数计算:将所有硬币金额转换为总美分数(整数类型),完全消除浮点数精度偏差,计算结果更准确。
  3. 简化美分计算:通过整数除法得到美元数,取余运算直接获取美分数,逻辑清晰且结果无误差。

内容的提问来源于stack exchange,提问作者Dietrich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:48:25