经典的数学题啊~~~
题解:http://blog.csdn.net/cscj2010/article/details/6768395
感触:数学还是得灵活应用啊,关键是这个公式啊……起初是打算用大数做的,觉得好麻烦,就搜了一下,看一下别人的思路,我晕,竟然可以这样思考,NB啊~~~
还有就是因为后面约了一个式子,但是这个n得足够大,所以要先存储前面的几个数……
#include "stdio.h"
#include "math.h"
int fib[50]={0,1};
int main()
{
int n,i;
double a;
double ig,fp;
for(i=2;i<=20;i++)
fib[i]=fib[i-1]+fib[i-2];
while(scanf("%d",&n)==1)
{
if(n<=20)
{
printf("%d\n",fib[n]);
continue;
}
a=((double)n)*log10((1+sqrt(5.0))/2)-0.5*log10(5.0);
fp=pow(10.0,modf(a,&ig));
while(fp<1000)
{
fp*=10;
}
printf("%d\n",(int)fp);//这里应该转换成整形数后再输出,因为用%.lf输出会出现进位现象……
}
return 0;
}