Java中整除5的硬币面额计算是否有更简便的实现方式?
更简洁的硬币面额计算实现
当然有更清爽的实现方式!你的现有代码通过while循环逐次扣除面额来计数,逻辑是对的,但其实可以利用整数除法和取模运算来大幅简化代码,不仅更易读,计算效率也更高——毕竟不用一次次循环做减法啦。
优化后的代码
private int dollar1, cent50, cent10, cent5; private void calDenomination() { int myCoins = 1250; // 计算1美元(100分)的数量,取模得到剩余金额 dollar1 = myCoins / 100; myCoins %= 100; // 计算50分硬币数量 cent50 = myCoins / 50; myCoins %= 50; // 计算10分硬币数量 cent10 = myCoins / 10; myCoins %= 10; // 最后剩余的金额都是5分的倍数,直接算数量 cent5 = myCoins / 5; }
为什么这样更优?
- 逻辑等价:整数除法会自动向下取整,完全符合你“优先使用高面额”的需求。比如1250分,
1250 / 100直接得到12个1美元硬币,剩余50分;50 / 50得到1个50分硬币,剩余0,和原代码的循环结果完全一致。 - 代码简洁:去掉了重复的while循环结构,每一行都清晰对应一个面额的计算,可读性拉满。
- 效率更高:尤其是当金额很大的时候,避免了大量循环减法操作,计算一步到位。
- 易扩展:如果以后要加入新的面额(比如25分硬币),只需要插入一行
cent25 = myCoins /25; myCoins %=25;即可,维护成本极低。
内容的提问来源于stack exchange,提问作者Nate Ho
相关产品推荐
相关产品推荐

