思路:因为趋于一定数值后前八位小数就不会再变化了,因此可以先输出一下试试,确定那个范围,然后多于那个范围的数据就是定值了,不需要再计算了,直接输出即可。
要注意的是vector<>中使用float会导致精度不够,需要使用double!
答案:
#include<iomanip>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<double> f={};
f.push_back(0);
f.push_back(1);
f.push_back(1);
f.push_back(2);
//cout <<setprecision(8) <<std::fixed<<f[2]/f[3];
long long n;
cin>>n;
if(n>=1&&n<=20)
{
for(int i=4;i<n+3;i++)
f.push_back(f[i-1]+f[i-2]);
cout <<setprecision(8) <<std::fixed<<f[n]/f[n+1];
}
else
cout <<"0.61803399";
return 0;
}