HDU Fibonacci

来源:互联网 发布:vr装修体验软件 编辑:程序博客网 时间:2024/06/09 20:51

原题链接:

思路:主要就是两点:
1)Fibonacci的通项表达式
F(n)=1/sqrt(5)*[((1+sqrt(5))/2)^n-((1-sqrt(5))/2)^n]
2)用对数处理通项

#include<bits/stdc++.h>using namespace std;int n;int F[21];void init(){    F[0]=0;    F[1]=1;    for(int i=2;i<21;i++){        F[i]=F[i-1]+F[i-2];    }}void solve(){    if(n<21){        cout<<F[n]<<endl;        return;    }    //n比较大,第二项可省略,对n比较小打表,避免精度问题    double x=n*log10((1+sqrt(5))/2)-log10(sqrt(5));    int y=x;    x-=y;    x=pow(10,x);    cout<<(int)(x*1000)<<endl;}int main(){    //freopen("in.txt","r",stdin);    init();    while(cin>>n){        solve();    }    return 0;}
原创粉丝点击