zoukankan      html  css  js  c++  java
  • HDU 1250 Hat's Fibonacci(大数相加)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1250

    Hat's Fibonacci

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


    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
    戴帽子的
     
    分析:
    大数相加的模板题!
     
    code:
    #include<bits/stdc++.h>
    using namespace std;
    #define max_v 10005
    
    string add(string s1,string s2)
    
    {
    
        if(s1.length()<s2.length())
    
        {
    
            string temp=s1;
    
            s1=s2;
    
            s2=temp;
    
        }
    
        int i,j;
    
        for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
    
        {
    
            s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));   //注意细节
    
            if(s1[i]-'0'>=10)
    
            {
    
                s1[i]=char((s1[i]-'0')%10+'0');
    
                if(i) s1[i-1]++;
    
                else s1='1'+s1;
    
            }
    
        }
    
        return s1;
    
    }
    
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            string p[n+5];
            if(n<=4)
            {
                printf("1
    ");
                continue;
            }
            p[1]="1";
            p[2]="1";
            p[3]="1";
            p[4]="1";
            for(int i=5; i<=n; i++)
            {
                p[i]=add(p[i-1],add(p[i-2],add(p[i-3],p[i-4])));
            }
            cout<<p[n]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    快速设置Scrapy随机的IP代理
    快速设置随机的UserAgent
    windows安装flask并创建虚拟环境
    数电和模电比较
    程序员如何写出一份好的文档?
    Qt简介
    基于 Qt的聊天工具
    如何将word组合图形保存成png
    2015电赛点滴
    函数定义
  • 原文地址:https://www.cnblogs.com/yinbiao/p/9326353.html
Copyright © 2011-2022 走看看