【题目链接】
ybt 1070:人口增长
OpenJudge NOI 1.5 14:人口增长问题
【题目考点】
1. 循环求幂
- 设变量r初始值为1:
int r = 1;
- 循环n次每次循环中输入变量a,将r的值设为r*a:
r *= a;
- 循环结束后,r即为 a n a^n an
2. 调用乘方函数pow()(存在于<cmath>中)
double pow(double a, double b);
求
a
b
a^b
ab
3.(扩展)快速幂
【解题思路】
已知:每年以0.1%(即0.001)的增长速度增长。最初有x亿人
1年后人口:
x
+
x
∗
0.001
=
x
(
1
+
0.001
)
x + x * 0.001 = x(1 + 0.001)
x+x∗0.001=x(1+0.001)
2年后人口:
x
(
1
+
0.001
)
+
x
(
1
+
0.001
)
∗
0.001
=
x
(
1
+
0.001
)
2
x(1 + 0.001) + x(1 + 0.001) * 0.001 = x(1 + 0.001)^2
x(1+0.001)+x(1+0.001)∗0.001=x(1+0.001)2
3年后人口:
x
(
1
+
0.001
)
2
+
x
(
1
+
0.001
)
2
∗
0.001
=
x
(
1
+
0.001
)
3
x(1 + 0.001)^2 + x(1 + 0.001)^2 * 0.001 = x(1 + 0.001)^3
x(1+0.001)2+x(1+0.001)2∗0.001=x(1+0.001)3
…
n年后人口:
x
(
1
+
0.001
)
n
x(1+0.001)^n
x(1+0.001)n
而后解决:求一个数n次幂的问题
【题解代码】
解法1:循环求幂
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
double x;
cin>>x>>n;
for(int i = 0; i < n; ++i)
{
x *= 1 + 0.001;
}
cout<<fixed<<setprecision(4)<<x;
return 0;
}
解法2:使用pow()函数
#include<bits/stdc++.h>
using namespace std;
int main()
{
double x, n;
cin>>x>>n;
cout<<fixed<<setprecision(4)<<x * pow(1 + 0.001, n);
return 0;
}