zoj 1828 Fibonacci Numbers(大数加法= =)

以前看到这题就感觉用大数真麻烦啊。。就直接跳过去了。。今天看党做了,我还是给它A了吧~

 

写着其实不麻烦啊~~就是确定上界试了好几次。。

 

求大数的斐波那契数,最大可达1000位!

 

用大数加法就好了。。

 

#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h> using namespace std; int fb[6001][1003]; int main(void) { int len[6002]; int n; memset(fb,0,sizeof(fb)); fb[1][0] = 1; fb[2][0] = 1; len[1] = 1; len[2] = 1; for(int i=3; i<=6000; i++) { memcpy(fb[i],fb[i-1],sizeof(fb[i-1])); int tlen = max(len[i-1],len[i-2]); for(int k=0; k<tlen; k++) { fb[i][k] += fb[i-2][k]; } for(int k=0; k<tlen; k++) if( fb[i][k] >= 10 ) { fb[i][k+1]++; fb[i][k] %= 10; } if( fb[i][tlen] != 0 ) tlen++; len[i] = tlen; } while( cin >> n ) { for(int i=len[n]-1; i>=0; i--) cout << fb[n][i]; cout << endl; } return 0; }  

你可能感兴趣的:(Numbers)