题意是说给一段范围,求包括了多少个菲波拉契数。
于是取两个大数,互相加,加到在范围内时开始计数即可。。。
import java.io.*; import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); BigInteger fib1, fib2; BigInteger a, b; while(in.hasNext()) { int cnt = 0; fib1 = BigInteger.valueOf(1); fib2 = BigInteger.valueOf(2); a = in.nextBigInteger(); b = in.nextBigInteger(); if(a.equals(BigInteger.valueOf(0)) && b.equals(BigInteger.valueOf(0))) { break; } while(true) { if(fib1.compareTo(a) >= 0 && fib1.compareTo(b) <= 0) { cnt++; } if(fib2.compareTo(a) >= 0 && fib2.compareTo(b) <= 0) { cnt++; } if(fib1.compareTo(b) > 0 || fib2.compareTo(b) > 0) { break; } fib1 = fib1.add(fib2); fib2 = fib2.add(fib1); } System.out.println(cnt); } } }