人口增长

GitHub跳转原题关系图返回列表

每年人口乘 1.001,n 年后人口就是 x*1.001^n,逐年递推相乘后用 printf 的 %.4f 保留四位小数输出。

OJ: roj

题目 ID: 1070

难度:入门

标签:入门数学浮点数python

创建: 2026-09-29 17:27

更新: 2026-10-05 00:05

题目描述

我国现有 xx 亿人口,按每年增长 0.1%0.1\% 计算,求 nn 年后的人口,保留小数点后四位。 输入一行两个整数 x,nx, n(1⩽x⩽1001 \leqslant x \leqslant 100,1⩽n⩽1001 \leqslant n \leqslant 100),输出人口数。

样例输入 13 10,样例输出 13.1306。

思路

“每年增长 0.1%0.1\%”表示每年的人口都乘以 1.0011.001,所以 nn 年后人口为 x×1.001nx \times 1.001^n。 按年递推相乘即可,注意增长的基础是当年人口而不是最初人口;输出用 printf("%.4f") 保留四位小数。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 17:27
# update_at: 2026-09-29 18:04

import sys

GROWTH = 1.001  # 每年增长 0.1%:当年人口乘以 1 + 0.001


def solve() -> None:
    base, years = map(int, sys.stdin.buffer.read().split())  # 人口基数 x、年数 n
    people = base * GROWTH**years  # 等比数列通项:n 年后人口 = x * 1.001**n
    print(f"{people:.4f}")


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-05 00:05
 * update_at: 2026-10-05 00:05
 */
// main.cpp:人口增长,每年增长 0.1%,求 n 年后的人口,保留 4 位小数。
#include <cstdio>

typedef long long ll;

const double GROWTH = 1.001; // 每年的人口是上一年的 1 + 0.1% 倍

int main() {
    ll base, years; // base 为人口基数 x,years 为年数 n
    scanf("%lld %lld", &base, &years);

    double people = base; // 从第 0 年的人口开始,逐年乘上增长倍率
    for (ll i = 1; i <= years; i++) {
        people = people * GROWTH;
    }

    printf("%.4f\n", people);
    return 0;
}