题目描述
一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。
输入描述:
测试数据包括多组,每组一行,为整数n(1≤n≤90)。
输出描述:
对应输出第n天有几只兔子(假设没有兔子死亡现象)。
输入例子:
1
2
输出例子:
1
2
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB
题目分析:
典型的斐波拉契数列问题
n=1, f(n)=1;
n=2, f(n)=2;
n>=3, f(n)=f(n-1)+f(n-2);
当n很大时,不管是int/long都会产生溢出情况,所以需要大数相加的问题,当然在java里面已经提供了大数相加的类型BigInteger,用就是了。
解法:
import java.math.BigInteger;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
while(cin.hasNextInt())
{
int n=cin.nextInt();
System.out.println(fun(n));
}
}
public static BigInteger fun(int n)
{
if (n==1)
{
return new BigInteger("1");
}
else if (n==2)
{
return new BigInteger("2");
}
else {
BigInteger pre=new BigInteger("1");
BigInteger sum=new BigInteger("2");
for (int i = 3; i <=n; i++)
{
BigInteger temp=sum;
sum=sum.add(pre);
pre=temp;
}
return sum;
}
}
}