码迷,mamicode.com
首页 > 其他好文 > 详细

大菲波数

时间:2015-02-11 21:47:03      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12716    Accepted Submission(s): 4352


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<cstdio>
#include<cstring>
char ans[1005][500];
//二维数组的一个维传递到自定义函数,这个维相当于独立的一个数组,t记录此时main中的i
void plus(char a[],char b[],int t)
{
    int c[500],d[500];
    memset(c,0,sizeof(c));
    memset(d,0,sizeof(d));
    int k,i=1,j=1,n,m;
    n=strlen(a);
    m=strlen(b);
    //逆置存储在整形数组
    for(k=n-1; k>=0; k--)
        c[i++]=a[k]-0;
    for(k=m-1; k>=0; k--)
        d[j++]=b[k]-0;
        
    k=n>m?n:m;
    //求和
    for(i=1; i<=k; i++)
    {
        c[i+1]+=(c[i]+d[i])/10;
        c[i]=(c[i]+d[i])%10;
    }
    
    if(c[k+1]) k=k+1;
    //重新转换为字符数组
    j=0;
    for(i=k; i>=1; i--)
        ans[t][j++]=c[i]+0;

}
int main()
{
    memset(ans,\0,sizeof(ans));
    int i,n;
    ans[1][0]=1;
    ans[2][0]=1;
    for(i=3; i<=1000; i++)
    {
        plus(ans[i-1],ans[i-2],i);
    }
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        printf("%s\n",ans[n]);
    }

}

 

大菲波数

标签:

原文地址:http://www.cnblogs.com/orchidzjl/p/4286924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!