TZOJ--1247: Hat's Fibonacci(大数)

1247: Hat's Fibonacci 

时间限制(普通/Java):1000MS/10000MS     内存限制:32768KByte

描述

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.

输入

Each line will contain an integers. Process to end of file.

输出

For each case, output the result in a line.

Note:

No generated Fibonacci number in excess of 2005 digits will be in the test data, ie. F(20) = 66526 has 5 digits.

样例输入

 100

样例输出

 4203968145672990846840663646

题目来源

HDOJ

 

题目链接:http://tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=1247

题目大意: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),根据这个公式计算F(n)

数据保证了输出最多不超过2005位,但我自己人懒不想打表估计2005位的需要开多大的数组,所以用了一个滑动的数组进行计算

f[i%4] = f[(i-1)%4]+f[(i-2)%4]+f[(i-3)%4]+f[(i-4)%4]

 

JAVA代码:

​import java.io.*;
import java.util.*;
import java.math.*;
public class Main
{ 
    public static void main(String args[]) throws Exception 
    { 
        Scanner cin=new Scanner(System.in); 
        BigInteger f[] = new BigInteger[10];
        f[3]=f[2]=f[1]=f[0]=BigInteger.ONE;
        while(cin.hasNext())
        {
        	int a=cin.nextInt();
        	f[3]=f[2]=f[1]=f[0]=BigInteger.ONE;
        	for(int i=4;i<a;i++)
        	{
        		f[(i)%4]=f[(i-1)%4].add(f[(i-2)%4].add(f[(i-3)%4].add(f[(i-4)%4])));
        	}
        	System.out.println(f[(a-1)%4]);
        }
    }
}

​

  

PYthon代码:

while True:
	try:
		n = int(input())
		f = [1,1,1,1]
		for i in range(4,n+1) :
		    f[i%4] = f[i%4]+f[(i-1)%4]+f[(i-2)%4]+f[(i-3)%4]
		print(f[(n-1)%4])
		
	except EOFError:
		break

  

转载于:https://www.cnblogs.com/Anidlebrain/p/10052831.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值