HDU1316:How Many Fibs?
斐波那契数问题(注意大数之间的比较):
题意:输入n组测试样例,每组两个数字,输出这两个数字之间的斐波那契数的个数。
总结:
- 斐波那契数列问题需要开大数数组,数组大小可以依据:1-10^100之间的斐波那契数有479个。
- 求解大数斐波那契个数的思路就是:把大数数组填充满斐波那契数,再用数组角标去和限定边界作比较。
import java.util.Scanner;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
BigInteger[] f = new BigInteger[500];//需要开大数数组
f[1] = new BigInteger("1");
f[2] = new BigInteger("2");
for (int i = 3; i < f.length; i++)
f[i] = f[i - 1].add(f[i - 2]);// 将斐波那契数存入数组
while (in.hasNext()) {
int ans = 0;
BigInteger a = in.nextBigInteger();
BigInteger b = in.nextBigInteger();
if (a.compareTo(BigInteger.ZERO) == 0
&& b.compareTo(BigInteger.ZERO) == 0)
break;
for (int i = 1; i < f.length; i++) {// 搜索
if (f[i].compareTo(a) >= 0 && f[i].compareTo(b) <= 0)
ans++;
if (f[i].compareTo(b) == 1)
break;
}
System.out.println(ans);
ans = 0;
}
}
}