【HDU】 1715 大菲波数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1715

题目意思很明确,大数无疑。TLE了一次,主要是我想看看数据有多水,所以开始的做法是没有打表的,TLE之后马上修改成打表版的,然后就AC了... 貌似说的很轻松,但是代码写了很长时间,一来是对写大数题目仍然不甚熟悉,二来是要记录大数,一时没想清楚,纠结了许久。

相信大家看完代码后也就明白了:

代码还是写的略挫了~

 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <string>
 5 #include <cstdio>
 6 #include <cstdlib>
 7 #include <algorithm>
 8 #include <ctime>
 9 #include <iomanip>
10 #define MAXN 1010
11 using namespace std;
12 int f[MAXN][MAXN],  len[MAXN];  //f数组存放Fibonacci数,len数组存放相应Fibonacci数的长度(方便输出而已)
13 
14 void GetFibonacci()    //打表函数
15 {
16     int i, j, k, len1, len2, t;
17     memset(len,0,sizeof(len));
18     len[1] = 1;
19     len[2] = 1;
20     f[1][0] = 1;
21     f[2][0] = 1;
22     for(i=3; i<MAXN; ++i){
23            len[i] = len[i-1] > len[i-2] ? len[i-1] : len[i-2];
24            for(j=0; j<MAXN; ++j) f[i][j] = 0;
25            t = 0;
26            for(j=0; j<len[i]; ++j){
27                  f[i][j] = (f[i-1][j]+f[i-2][j]+t)%10;
28                  t = (f[i-1][j]+f[i-2][j]+t)/10;
29            }
30            if(t){
31                 f[i][len[i]] = t;
32                 len[i]++;
33            }
34     }
35 }
36 
37 int main()
38 {
39     int n, i, j, a;
40     GetFibonacci();
41     scanf("%d",&n);
42     while(n--){
43           scanf("%d",&a);
44           if(a==1 || a==2){
45                printf("1\n");
46                continue;
47           }
48           for(i=len[a]-1; i>=0; --i)  printf("%d",f[a][i]);
49           printf("\n");
50     }
51     return 0;
52 }

 

posted on 2012-08-04 18:12  Yuna_  阅读(94)  评论(0)    收藏  举报