1 #include <stdio.h> 2 #include <math.h> 3 4 void main() 5 { 6 int a[21]; 7 int n,i; 8 double p,sum; 9 a[0] = 0; a[1] = 1; 10 for(i = 2; i <= 20; i ++) 11 a[i] = a[i-1] + a[i-2]; 12 while(scanf("%d",&n)!= EOF) 13 { 14 if(n <= 20) 15 { 16 printf("%d\n",a[n]); 17 continue; 18 } 19 else{ 20 sum = log10(1.0/sqrt(5))+n*log10((1 + sqrt(5))/2); //利用公式,并且省去了取对数时候趋于零的那部分。 21 sum = sum - (int)sum; 22 p = pow(10,sum); 23 while(p < 1000)//至于为什么这样呢,相当于移位操作 24 p *=10; 25 printf("%d\n",(int)p);//输出时候取整。 26 } 27 28 } 29 }