zoukankan      html  css  js  c++  java
  • 1715 大菲波数

    http://acm.hdu.edu.cn/showproblem.php?pid=1715

    大菲波数

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

    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
     
    Recommend
    lcy
     
    我的大数加法模板:
    char a[Max],b[Max],c[Max],sum[Max];
    
    void  jia(char str1[],char str2[])
    {
        int i,j,k,z;
        k=0;z=0;
        for(i=strlen(str1)-1,j=strlen(str2)-1;i>=0||j>=0;i--,j--)   //核心,加法以及进位
        {
            if(i>=0)
                z+=str1[i]-'0';
            if(j>=0)
                z+=str2[j]-'0';
           c[k++]=z%10+'0';    
           z=z/10;
        }
        if(z) c[k++]='1';   
        c[k]='\0';
        i=0;
        for(--k;k>=0;k--)
            sum[i++]=c[k];        //转换成一个能完整方便输出的字符串数组sum
        sum[i]='\0';
    }

    建立一个二维数组存放计算出来的Fibonacci数列,这样运行的时间将大大减少,避免的重复的计算,但是空间开销也增大了很多。

    #include <stdio.h>
    #include <string.h>
    #define Max  2001+3
    
    char a[Max],b[Max],c[Max];
    char fib[1002][Max];
    
    void  jia(char str1[],char str2[],char sum[])
    {
        int i,j,k,z;
    //    char sum[Max];
        k=0;z=0;
        for(i=strlen(str1)-1,j=strlen(str2)-1;i>=0||j>=0;i--,j--)
        {
            if(i>=0)
                z+=str1[i]-'0';
            if(j>=0)
                z+=str2[j]-'0';
           c[k++]=z%10+'0';
           z=z/10;
        }
        if(z) c[k++]='1';
        c[k]='\0';
        i=0;
        for(--k;k>=0;k--)
            sum[i++]=c[k];
        sum[i]='\0';
    }
    
    void Fib()
    {
        *fib[0]='0';
        *fib[1]='1';
      for(int i=2;i<=1000;i++)
          jia(fib[i-1],fib[i-2],fib[i]);     //加法函数增加一参数,用来保存结果
    }
    
    int main()
    {
        int n,t;
        Fib();
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&t);
            printf("%s\n",fib[t]);
        }
       return 0;
    }
  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/hzg656343072/p/2645520.html
Copyright © 2011-2022 走看看