问题是求出斐波那契数列的第n个,这里要用大数加法预处理,然后就可以了
代码:
1 #include <iostream> 2 #include <sstream> 3 #include <cstdio> 4 #include <climits> 5 #include <cstring> 6 #include <cstdlib> 7 #include <string> 8 #include <stack> 9 #include <map> 10 #include <cmath> 11 #include <vector> 12 #include <queue> 13 #include <algorithm> 14 #define esp 1e-6 15 #define pi acos(-1.0) 16 #define pb push_back 17 #define lson l, m, rt<<1 18 #define rson m+1, r, rt<<1|1 19 #define mp(a, b) make_pair((a), (b)) 20 #define in freopen("in.txt", "r", stdin); 21 #define out freopen("out.txt", "w", stdout); 22 #define print(a) printf("%d ",(a)); 23 #define bug puts("********))))))"); 24 #define stop system("pause"); 25 #define Rep(i, c) for(__typeof(c.end()) i = c.begin(); i != c.end(); i++) 26 #define inf 0x0f0f0f0f 27 28 using namespace std; 29 typedef long long LL; 30 typedef vector<int> VI; 31 typedef pair<int, int> pii; 32 typedef vector<pii> VII; 33 typedef vector<pii, int> VIII; 34 typedef VI:: iterator IT; 35 struct BigInt 36 { 37 int len; 38 int f[1100]; 39 void Init(int n) 40 { 41 memset(f, 0, sizeof(f)); 42 len = 0; 43 while(n) 44 { 45 f[len] = n % 10; 46 n /= 10; 47 len++; 48 } 49 50 if(len > 0) 51 len--; 52 } 53 BigInt operator + (const BigInt &a)const 54 { 55 int carry = 0; 56 BigInt c; 57 c.Init(0); 58 int i; 59 for(i = 0; i <= max(a.len, len); i++) 60 { 61 carry = carry + f[i] + a.f[i]; 62 c.f[i] = carry%10; 63 carry /= 10; 64 } 65 if(carry == 0) 66 return c.len = i - 1, c; 67 while(carry) 68 { 69 c.f[i] = carry%10; 70 carry /= 10; 71 i++; 72 } 73 c.len = i-1; 74 return c; 75 } 76 }; 77 78 BigInt fi[11000]; 79 int main(void) 80 { 81 fi[1].Init(1); 82 fi[2].Init(1); 83 for(int i = 3; i <= 2000; i++) 84 fi[i] = fi[i-2] + fi[i-1]; 85 int t; 86 while(scanf("%d", &t), t) 87 { 88 for(int i = fi[t].len; i >= 0; i--) 89 printf("%d", fi[t].f[i]); 90 puts(""); 91 } 92 return 0; 93 }