C++找零硬币计算程序Bug排查:输入78时nickels结果异常
找零硬币计算中Nickels数值错误的修复方案
错误原因
你计算5分硬币(nickels)的逻辑存在问题:原代码直接用num % 10获取原金额对10的余数,但这个值没有考虑已经用掉的25分硬币(quarters)和10分硬币(dimes)的金额。以输入78为例:
- 3个quarters占75分,实际剩余3分
- 但
78 % 10得到的是8,用8/5算出1个nickels,这和实际剩余金额不符,导致结果错误。
修正后的代码
#include <cmath> #include <iostream> using namespace std; int main() { int num, q, d, n, p; cout << "Enter a number between 0 to 99 for cents: "; cin >> num; q = num / 25; cout << "The number of quarters: " << q << endl; int after_quarters = num % 25; d = after_quarters / 10; cout << "The number of dimes: " << d << endl; int after_dimes = after_quarters % 10; n = after_dimes / 5; cout << "The number of nickels: " << n << endl; p = after_dimes % 5; cout << "The number of pennies: " << p << endl; return 0; }
修正逻辑说明
- 先计算quarters数量,同时得到扣除quarters后的剩余金额
after_quarters = num % 25 - 用剩余金额计算dimes数量,再得到扣除dimes后的剩余金额
after_dimes = after_quarters % 10 - 基于最终剩余金额计算nickels和pennies,确保每一步都使用扣除前面硬币后的实际剩余金额
输入78时,修正后的结果为:quarters:3、dimes:0、nickels:0、pennies:3,符合预期。
内容的提问来源于stack exchange,提问作者Jermal
相关产品推荐
相关产品推荐

