为何我的找零计算代码无法得出正确结果?
问题分析与修复方案
你的代码存在两处核心错误,直接导致计算结果异常:
1. 大额硬币计算函数仅执行单次判断,未处理多枚兑换场景
calculate_quarters、calculate_dimes、calculate_nickels这三个函数目前只会检查一次是否能兑换对应硬币,比如输入50分时,本该返回2个quarters,但当前代码只返回1。
错误示例(以quarters为例):
int calculate_quarters(int cents) { int qs = 0; if (cents >= 25) { cents -= 25; qs++; } return qs; }
修复方式:用整数除法直接计算最大可兑换数量(简洁高效):
int calculate_quarters(int cents) { return cents / 25; } int calculate_dimes(int cents) { return cents / 10; } int calculate_nickels(int cents) { return cents / 5; }
2. calculate_pennies函数逻辑完全错误
当前函数的判断条件是if (cents >=5),完全不符合便士(1分)的兑换逻辑,而且仅执行一次加1操作,根本无法统计剩余的所有分币。
错误写法:
int calculate_pennies(int cents) { int ps = 0; if (cents >= 5) { cents -= 1; ps++; } return ps; }
修复方式:直接返回剩余的所有分币数量即可:
int calculate_pennies(int cents) { return cents; }
验证修复效果
- 输入4时:经过前面的大额硬币计算后剩余4分,
calculate_pennies返回4,总硬币数为4,符合预期 - 输入26时:quarters返回1,剩余1分,pennies返回1,总硬币数为2,符合预期
内容的提问来源于stack exchange,提问作者ars
相关产品推荐
相关产品推荐

