【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 }
浙公网安备 33010602011771号