杭电 1715 大菲波数

Problem Description
Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项Fibonacci数值。
 

 

Input
输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。
 

 

Output
输出为N行,每行为对应的f(Pi)。
 

 

Sample Input
5 1 2 3 4 5
 

 

Sample Output
1 1 2 3 5
 

 

Source
 

 

Recommend
lcy
 
    用一个二维数组存放斐波那契数,第一个维表示 第几个斐波那契数,第二位是该斐波那契数属于的最大长度;
  然后用查表的方式进行查询,这样的可以计算一次,其他只要知道是第几个,就可以查得該数!
 
View Code
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int fib[1010][300];
 5 
 6 void add( int *num1, int *num2, int *num3 )
 7 {
 8      int i;
 9      memset(num3, 0, 300 * sizeof(int));
10      for( i = 0; i < 300; i++ )
11      {
12           num3[i] += (num1[i] + num2[i]);
13           if( num3[i] >= 10 )
14           {
15               num3[i+1]++;
16               num3[i] = num3[i] % 10;
17           }
18      }
19 }
20 
21 int main(int argc, char *argv[])
22 {
23     int i,n, pi;
24     //printf( "00\n" );
25     
26     memset(fib[1],0,300*sizeof(int));
27     memset(fib[2],0,300*sizeof(int));
28     
29     fib[1][0] = 1;
30     fib[2][0] = 1;
31     for( i = 3; i <= 1000; i++ )
32          add(fib[i-1], fib[i-2], fib[i]);
33     scanf( "%d", &n );
34     while( n-- )
35     {
36            scanf("%d", &pi);
37            for( i = 299; i >= 0; i-- )
38                 if( fib[pi][i] != 0 )
39                     break;
40            for( ; i >= 0; i-- )
41                 printf( "%d", fib[pi][i] );
42            printf( "\n" );
43     }
44   
45  // system("PAUSE");    
46   return 0;
47 }

 

posted @ 2013-05-10 23:51  翼展zjz  阅读(134)  评论(0编辑  收藏  举报