大菲波数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6572 Accepted Submission(s): 2157
Problem Description
Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项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
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 5 #define MAXN 1010 6 7 class Number 8 { 9 public: 10 int* a; 11 int iTop; 12 void setSize(int n); 13 void setValueSum(Number, Number); 14 void setTopValue(); 15 void showValue(); 16 }; 17 18 void Number::setSize(int n) 19 { 20 a = new int[n]; 21 for (int i = 0; i < n; i++) 22 { 23 a[i] = 0; 24 } 25 iTop = n - 1; 26 } 27 28 void Number::setValueSum(Number num1, Number num2) 29 { 30 for (int i = 0; i <= num2.iTop; i++) 31 { 32 a[i] = num2.a[i]; 33 } 34 for (int i = 0; i <= num1.iTop; i++) 35 { 36 a[i] += num1.a[i]; 37 } 38 for (int i = 0; i <= iTop; i++) 39 { 40 a[i+1] += (a[i]/10); 41 a[i] %= 10; 42 } 43 } 44 45 void Number::setTopValue() 46 { 47 while (a[iTop] == 0) 48 { 49 iTop--; 50 } 51 } 52 53 void Number::showValue() 54 { 55 for (int i = iTop; i >= 0; i--) 56 { 57 printf("%d", a[i]); 58 } 59 printf("\n"); 60 } 61 62 Number iMap[MAXN]; 63 64 void iMakeMap() 65 { 66 iMap[1].setSize(1); 67 iMap[1].a[0] = 1; 68 iMap[2].setSize(1); 69 iMap[2].a[0] = 1; 70 71 for (int i = 3; i < MAXN; i++) 72 { 73 iMap[i].setSize(iMap[i-1].iTop+2); 74 iMap[i].setValueSum(iMap[i-1], iMap[i-2]); 75 iMap[i].setTopValue(); 76 } 77 } 78 79 int main() 80 { 81 iMakeMap(); 82 int iT; 83 scanf("%d", &iT); 84 while (iT--) 85 { 86 int iIndex; 87 scanf("%d", &iIndex); 88 iMap[iIndex].showValue(); 89 } 90 return 0; 91 } 92 93 // end 94 // ism