• hdu 1250 Hat's Fibonacci


    Hat's Fibonacci

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 5705    Accepted Submission(s): 1898


    Problem Description
    A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1.
    F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4)
    Your task is to take a number as input, and print that Fibonacci number.
     
    Input
    Each line will contain an integers. Process to end of file.
     
    Output
    For each case, output the result in a line.
     
    Sample Input
    100
     
    Sample Output
    4203968145672990846840663646
    Note: No generated Fibonacci number in excess of 2005 digits will be in the test data, ie. F(20) = 66526 has 5 digits.
     
    Author
    戴帽子的
     
    Recommend
    Ignatius.L
     
    代码:

         
      思路:由于这样的斐波那契数列越向后,数越大。就会变成大数问题,因此我们把结果对10000取余,
      分割成每四个数字一组,这样就可以变大数为用已知的变量储存,从而化 复杂为简单。
          #include "stdio.h"
    #define N 10000
    #define M  800
    int a[N][M]={0};
    int main()
    {   int i,j,k=0,m,n;

        a[1][0]=1;
        a[2][0]=1;
        a[3][0]=1;
        a[4][0]=1;
       
        for(i=5;i<N;i++)
         for(j=0;j<M;j++)
          {k=k+a[i-1][j]+a[i-2][j]+a[i-3][j]+a[i-4][j];
            a[i][j]=k%10000;                     //
            k=k/10000;
          }
          
              while(k)            //为保证所得每一项数都以 分成每四个一组储存完正
            {a[i][j++]=k%10000;    
            k=k/10000;
            }
          

             
          while(scanf("%ld",&n)>0)
          {
              for(i=M-1;i>=0;i--)
                if(a[n][i]!=0)
                    break;
                //    printf("%d   ",i);
            printf("%ld",a[n][i]);
            for(i--;i>=0;i--)
                printf("%4.4ld",a[n][i]); //注意%4.4ld 与 %04ld 输出 方式一样如下测试程序
            printf(" ");
                         
                                    
                // i=M;                   
             /* for(i=M;i>=0;i--)
              if(a[n][i]!=0)
                break;
               printf("%d",i);*
                while(a[n][i]==0)
                   i--;
                    printf("%d",i);
             //printf("%4ld",a[n][i]);
             for(i;i>=0;i--)
             printf("%4ld",a[n][i]);
              printf(" ");*/
          
          }
          return 0;
          }
         
          测试程序:
            #include "stdio.h"
          #include "stdlib.h"
          int main()
          {long x=1;
          printf("%6.6ld",x);
          printf("%06ld",x);
          system ("pause");

    }

    思索:大数可以考虑分段存储和输出
          
          
         

  • 相关阅读:
    JavaBean和Map之间的转化
    java基础Map遍历
    sql server
    android之使用百度地图(1)
    Java基础知识2(字符串)
    Java基础知识1
    DAY12-Java中的类--接DAY10
    DAY11-LocalDate小练习
    DAY10-万物皆对象-2018-2-2
    DAY9-字符串笔记整理2018-1-19
  • 原文地址:https://www.cnblogs.com/songmingtao/p/3226174.html
Copyright © 2020-2023  润新知