You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ while循环计算账户翻倍年份:输出余额与预期不符

问题分析与修复

你的代码核心问题在于循环内的操作顺序错误:你将计算利息和存入年度金额的操作绑定在一起,无论计息后余额是否已经达到目标,都会执行存款操作。而题目隐含的规则是:当当年利息计算完成后,余额已经达到初始金额的两倍时,无需再存入当年的固定金额。

具体差异

当输入为100时,你的代码在第13年的执行流程是:

  1. 上一年余额为19550.28
  2. 计算利息:19550.28 * 5% ≈ 977.51
  3. 余额变为19550.28 + 977.51 + 100 = 20627.79(多存入了100元)

而正确的流程应该是:

  1. 上一年余额为19550.28
  2. 计算利息:19550.28 *5% ≈977.51
  3. 余额变为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;
}

逻辑说明

  1. 每次循环先递增年份,计算当前余额的利息并更新余额
  2. 检查计息后的余额是否达标:
    • 若达标,直接退出循环,不执行存款操作
    • 若未达标,存入当年固定金额,继续下一轮循环

这样修改后,输入100时会得到预期的年份13,余额20527.8。

内容的提问来源于stack exchange,提问作者Colin Schmitt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:40:31