C++复利计算程序余额输出与预期不符,差值100求解
问题分析与解决方法
问题根源
当前程序的核心问题是循环内操作逻辑顺序错误:在每年的计算流程中,无论计算利息后余额是否已达到目标值,都会强制添加年度缴款,导致最后一年的余额多计入了一笔年度缴款。
具体来说,当第12年末余额为19550.28时,进入循环后:
- 年份增加至13;
- 计算利息后余额变为
19550.28 * 1.05 = 20527.79,此时已超过目标值20000; - 程序仍然执行了
balance += contribution,将余额额外增加100,最终得到20627.8,与预期不符。
解决方法
在计算完当年利息后增加判断逻辑:如果余额已达标,就不再添加年度缴款,直接退出循环。修改后的循环代码如下:
while(balance < TARGET) { year++; // 先计算当年利息 balance += balance * RATE/100; // 若利息计算后已达标,无需再添加年度缴款 if (balance >= TARGET) { break; } // 未达标则添加年度缴款 balance += contribution; }
修改后输入100运行,输出将符合预期:
Annual contribution: 100 Year: 13 Balance: 20527.8
逻辑说明
调整后的流程符合合理的理财计算逻辑:当当年利息计算后余额已翻倍,就无需再缴纳当年款项,此时的年份即为所需年数;只有当利息计算后余额仍未达标时,才需要继续缴纳年度缴款并进入下一轮循环。
内容的提问来源于stack exchange,提问作者Mashal Alzoqari
相关产品推荐
相关产品推荐

