C++计算人口指数增长时如何在循环中持续更新变量值?
问题核心原因
- 新增人口计算代码放在循环外部,仅使用初始人口值计算了一次固定增量,后续每轮都累加同一个固定值,得到的是线性增长结果,不符合复利式指数增长的要求。
- 使用
int类型做整数除法会自动丢弃小数部分,多轮计算后精度偏差会持续累积。
修复方法
将新增人口的计算逻辑移入for循环内部,每轮迭代都基于当前最新的人口数计算当轮新增人口。如果需要更高的计算精度,可将人口变量改为浮点类型。
可直接运行的修正代码
#include <iostream> using namespace std; int main() { double pop; int round; cout << "Population: "; cin >> pop; cout << "Round: "; cin >> round; for (int i = 1; i <= round; i++) { double new_people = pop * 0.05; pop += new_people; cout << "第" << i << "轮人口:" << pop << endl; } return 0; }
如果需要保留int类型,仅调整计算位置即可:
#include <iostream> using namespace std; int main() { int pop; int round; cout << "Population: "; cin >> pop; cout << "Round: "; cin >> round; for (int i = 1; i <= round; i++) { int new_people = (pop * 5) / 100; pop += new_people; cout << "第" << i << "轮人口:" << pop << endl; } return 0; }
结果验证
输入初始人口10000、轮次3时,int版本输出结果依次为10500、11025、11576,double版本输出为10500、11025、11576.25,符合预期的复利计算逻辑。
内容的提问来源于stack exchange,提问作者Abdullah Mert Özdemir
相关产品推荐
相关产品推荐

