HDU 1568 快速求斐波那契前四位

思路:

把斐波那契通项公式转化成log的形式,高中数学...

//By SiriusRen
#include <bits/stdc++.h>
using namespace std;
int f[21],n;
int main(){
    f[1]=f[2]=1;
    for(int i=3;i<=20;i++)f[i]=f[i-1]+f[i-2];
    while(~scanf("%d",&n)){
        if(n<=20)printf("%d\n",f[n]);
        else{
            double s=log10(1/sqrt(5))+n*log10((1+sqrt(5))/2),t;
            s-=(int)s,t=pow(10,s);
            while(t<1000)t*=10;
            printf("%d\n",(int)t);
        }
    }
}

 

posted @ 2018-08-07 15:13  SiriusRen  阅读(118)  评论(0编辑  收藏  举报