大菲波數
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
計算第n項Fibonacci數值。
/****************************
*Name:大菲波數.c
*Tags:ACM BigNumber
****************************/
#include <stdio.h>
#include <math.h>
int main()
{
int f[1001][100];
int c, i, j, t, N, pi;
f[1][0] = 1; //0單元存儲長度
f[1][1] = 1;
f[2][0] = 1; //0單元存儲長度
f[2][1] = 1;
for(i = 3; i <= 1000; i++) {
for(j = 0; j < 100; j++) {
f[i][j] = 0;
}
f[i][0] = f[i-1][0];
for(j = 1; j <= f[i-1][0]; j++) {
f[i][j] += f[i-1][j];
if(f[i][j] >= 10000) {
if(j == f[i][0]) {
f[i][0] = j+1;
}
f[i][j+1] += f[i][j] / 10000;
f[i][j] %= 10000;
}
}
for(j = 1; j <= f[i-2][0]; j++) {
f[i][j] += f[i-2][j];
if(f[i][j] >= 10000) {
if(j == f[i][0]) {
f[i][0] = j+1;
}
f[i][j+1] += f[i][j] / 10000;
f[i][j] %= 10000;
}
}
if(f[i][f[i][0]] >= 10000) {
f[i][f[i][0]+1] = f[i][f[i][0]] / 10000;
f[i][f[i][0]] %= 10000;
f[i][0] += 1;
}
}
scanf("%d", &N);
while(N--) {
scanf("%d", &pi);
/*for(pi = 1; pi <= 1000; pi++) {
printf("pi = %d:%d\n", pi, f[pi][0]);
}*/
printf("%d", f[pi][f[pi][0]]);
for(i = f[pi][0]-1; i >= 1; i--) {
printf("%04d", f[pi][i]);
}
printf("\n");
}
return 0;
}