大菲波數

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]);
    }

}
相關文章
相關標籤/搜索