C++ while循环计算账户翻倍年份:输出余额与预期不符
问题分析与修复
你的代码核心问题在于循环内的操作顺序错误:你将计算利息和存入年度金额的操作绑定在一起,无论计息后余额是否已经达到目标,都会执行存款操作。而题目隐含的规则是:当当年利息计算完成后,余额已经达到初始金额的两倍时,无需再存入当年的固定金额。
具体差异
当输入为100时,你的代码在第13年的执行流程是:
- 上一年余额为19550.28
- 计算利息:19550.28 * 5% ≈ 977.51
- 余额变为19550.28 + 977.51 + 100 = 20627.79(多存入了100元)
而正确的流程应该是:
- 上一年余额为19550.28
- 计算利息:19550.28 *5% ≈977.51
- 余额变为19550.28+977.51=20527.79,此时已达标,无需存入100元
修复后的代码
#include <iostream> using namespace std; int main() { const double RATE = 5; const double INITIAL_BALANCE = 10000; const double TARGET = 2 * INITIAL_BALANCE; cout << "Annual contribution: " << endl; double contribution; cin >> contribution; double balance = INITIAL_BALANCE; int year = 0; while (balance < TARGET) { year++; // 先计算当年利息 double interest = balance * RATE / 100; balance += interest; // 如果计息后已达标,无需存款,直接退出循环 if (balance >= TARGET) { break; } // 未达标则存入当年金额 balance += contribution; } cout << "Year: " << year << endl; cout << "Balance: " << balance << endl; return 0; }
逻辑说明
- 每次循环先递增年份,计算当前余额的利息并更新余额
- 检查计息后的余额是否达标:
- 若达标,直接退出循环,不执行存款操作
- 若未达标,存入当年固定金额,继续下一轮循环
这样修改后,输入100时会得到预期的年份13,余额20527.8。
内容的提问来源于stack exchange,提问作者Colin Schmitt
相关产品推荐
相关产品推荐

