Shirlies
宁静专注认真的程序媛~

经典的数学题啊~~~

题解: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;
}

 

 

 

posted on 2012-02-13 10:53  Shirlies  阅读(490)  评论(0编辑  收藏  举报