情報学オリンピック一本通1070:人口増加|OpenJudge NOI 1.5 14:人口増加問題


【タイトルリンク】
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()を呼び出す(中に存在する)double pow(double a, double b);a b^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)x+x∗0.001=x(1+0.001)2年後人口:x(1+0.001)+x(1+0.001)+x(1+0.001)=x(1+0.001)2 x(1+0.001)+x(1+0.001)*0.001=x(1+0.001)*0.001=x(1+0.001)*0.001=x(1+x(1+0.001)+x(1+x(1+0.001+x(1+0.001)=x(1+x(1+x(1+0.001)=x+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)nx(1+0.001)^nx(1+0.001)n後解決:数n乗を求める問題
    【問題解決コード】
    解法1:累乗を繰り返す
    #include
    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
    using namespace std;
    int main()
    {
         
    	double x, n;
    	cin>>x>>n;
    	cout<<fixed<<setprecision(4)<<x * pow(1 + 0.001, n);
    	return 0;
    }