C#储蓄账户利息问题:如何计算余额达到目标值所需的年数
现有代码的问题
- 循环内第一行就执行
return,逻辑会在第一次循环时直接退出,完全无法累计年数 - 只硬编码了余额≥5000美元的利率,没有覆盖所有档位,且余额每年复利上涨后会切换利率档位,不能固定用2.475%计算
balance++逻辑错误,余额是按利率复利增长,不是每次加1
实现思路
你可以直接复用之前已经完成的两个方法(获取对应利率、计算年度更新后余额),避免重复编码:
- 新增年数计数器,初始值为0
- 先做边界判断:如果初始余额已经≥目标余额,直接返回0年
- 循环执行逻辑:更新当前余额,年数+1,直到当前余额≥目标余额
- 终止循环后返回累计的年数
完整代码示例
public static int YearsBeforeDesiredBalance(decimal balance, decimal targetBalance) { // 边界处理:初始余额已达标 if (balance >= targetBalance) { return 0; } int years = 0; decimal currentBalance = balance; while (currentBalance < targetBalance) { // 复用已实现的年度余额更新逻辑 currentBalance = CalculateAnnualBalance(currentBalance); years++; } return years; } // 你之前已完成的计算年度更新后余额的方法,供参考 private static decimal CalculateAnnualBalance(decimal balance) { decimal rate = GetInterestRate(balance); return balance * (1 + rate); } // 你之前已完成的获取对应利率的方法,供参考 private static decimal GetInterestRate(decimal balance) { if (balance < 0) { return 0.03213m; } else if (balance < 1000) { return 0.005m; } else if (balance < 5000) { return 0.01621m; } else { return 0.02475m; } }
按示例参数balance: 200.75m, targetBalance: 214.88m调用,最终返回值为14,符合要求。
内容的提问来源于stack exchange,提问作者ClearlyQ
相关产品推荐
相关产品推荐

