HDu 1715-大菲波数

来源:互联网 发布:驴妈妈 个人分销 知乎 编辑:程序博客网 时间:2024/06/06 18:28

大菲波数

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数值。
 

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



分析:
题意很好理解,但是数据过大,不能直接相乘,得采用数组大数的计算方法。




#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;}