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

如何用C++计算多年后国家人口?代码运行异常求助

人口增长计算代码故障排查

已知某国初始人口为n,每年增长率为m%,求k年后的人口(取整结果)。我写了下面的代码,但无法正常运行,求解决办法:

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int n, k;
    float m;
    cin >> n >> m >> k;

    for (int i = 1; i <= k; i++) {
        n += n * (m / 100);
    }

    int x = round(n);
    cout << x << endl;

    return 0;
}

问题根源

  • n是int类型,每次循环计算n += n*(m/100)时,小数部分会被直接截断丢弃,导致复利计算完全失真。比如初始人口101、增长率3%时,第一年实际应为104.03,但用int存储会直接变成104,后续所有计算都基于这个错误的整数,误差会越来越大。
  • round(n)完全无效,因为n本身就是int类型,不存在小数需要四舍五入。

修正方案

把存储人口的变量换成浮点数类型(比如double),保留每次增长的小数部分,最后再取整:

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int n, k;
    float m;
    cin >> n >> m >> k;

    double population = n;
    for (int i = 1; i <= k; i++) {
        population += population * (m / 100);
    }

    int x = round(population);
    cout << x << endl;

    return 0;
}

或者用复利公式直接计算,效率更高:

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int n, k;
    float m;
    cin >> n >> m >> k;

    double population = n * pow(1 + m / 100.0, k);
    int x = round(population);
    cout << x << endl;

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:16:01