Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17138 Accepted Submission(s): 5689
Problem Description
Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3。 计算第n项Fibonacci数值。
Input
输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。
Output
输出为N行,每行为对应的f(Pi)。
Sample Input
5
1
2
3
4
5
Sample Output
1
1
2
3
5
Source
2007省赛集训队练习赛(2)
第1000位的位数为209,注意精度就行了。
代码如下:
#include <cstdio>
int main()
{
int k,n,u;
int fi[1011][211] = {0};
fi[1][1] = 1;
fi[2][1] = 1;
for (int i = 3 ; i <= 1000 ; i++)
{
for (int j = 1 ; j <= 210 ; j++)
{
fi[i][j] += fi[i-1][j] + fi[i-2][j];
if (fi[i][j] >= 10)
{
fi[i][j] -= 10;
fi[i][j+1]++;
}
}
}
scanf ("%d",&u);
while (u--)
{
scanf ("%d",&n);
k = 210;
for ( ; fi[n][k] == 0 ; k--);
for ( ; k >= 1 ; k--)
printf ("%d",fi[n][k]);
printf ("\n");
}
return 0;
}