大菲波数
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 20843 Accepted Submission(s): 7030
题目链接:点击打开链接
Problem Description
Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项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
5
1
2
3
4
5
Sample Output
1
1
2
3
5
分析:
题意很好理解,但是数据过大,不能直接相乘,得采用数组大数的计算方法。
#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#include<math.h>
using namespace std;
int s[1005][1005];///一维存第几个数,二维存该数有几位
int main()
{
int t,n,i,j,k,num;
scanf("%d",&t);
while(t--)
{
memset(s,0,sizeof(s));
scanf("%d",&n);
s[1][1]=1;///前两位先赋值
s[2][1]=1;
k=1;///存位数
for(i=3;i<=n;i++)///遍历到n
{
num=0;///存进位的情况
for(j=1;j<=k;j++)///对应位上数字相加,别忘了可能还有进位的数
{
s[i][j]=s[i-1][j]+s[i-2][j]+num;
num=s[i][j]/10;
s[i][j]%=10;
}
while(num)///如果首位有进位的情况
{
s[i][++k]=num;
num/=10;
}
}
for(i=k;i>0;i--)///逆序输出
printf("%d",s[n][i]);
printf("\n");
}
return 0;
}