因为所给数据范围过大,所以我们不能一个一个去计算斐波那契数列到第N项,那么这里就有一个知识点: 如果n>20,前8位小数是相同的,即均为0.61803399,所以无论n取多大,只要它超过了20 ,就计算n=20的黄金分割比例,即F[ n ] / F[ n+1 ]。
代码如下:
#include <iostream>
using namespace std;
typedef long long LL;
const LL N=100;
LL fib[N];
int main()
{
fib[1]=1,fib[2]=1;
LL n;cin>>n;
if(n>20) n=20;
for(LL i=3;i<=n+1;i++)
fib[i]=fib[i-1]+fib[i-2];
double a=(double)fib[n]/fib[n+1];
printf("%.8lf",a);
return 0;
}