题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=461
题意:给你一个n,求出Fibonacci数列中的F(n)的前4位,不足4位的全部输出。
分析:化简log10(fibonacci数列通项公式)http://blog.youkuaiyun.com/w20810/article/details/43836997
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
#define sqrt5 2.236067977499790
int Fib[500];
int main()
{
Fib[0]=0;
Fib[1]=1;
for(int i=2;i<=20;i++)
Fib[i]=Fib[i-1]+Fib[i-2];
int n;
while(scanf("%d",&n)!=EOF)
{
if(n<=20)
{
printf("%d\n",Fib[n]);
continue;
}
double t=n*log10((1.0+sqrt5)/2.0)-log10(sqrt5);
int c=t;
double v=pow(10,t-c);
cout<<floor(v*1000)<<endl;
}
return 0;
}