这个题目开始的看的时候以为需要什么特别的公式来求解某个区间的值的个数。但是发现根本无法解方程,看了别人的思想,由于在10^100内出现的fib数不是很多大概有600个,然后直接用大数计算出来这些值,然后再去比较判断。这样肯定首选java写了,大数类不是一般的好用。。。。。在杭电上交这个题目一直没过,从网上搜的代码叫过去也没过,可能是数据的原因。在uva上一次就过,代码如下:
import java.io.* ;
import java.util.* ;
import java.math.* ;
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner(System.in) ;
BigInteger[] f = new BigInteger[1000] ;
f[1] = BigInteger.valueOf(1) ;
f[2] = BigInteger.valueOf(2) ;
int i ;
for(i = 3 ; i <= 600 ; i ++){
f[i] = f[i-1].add(f[i-2]) ;
}
BigInteger a ;
BigInteger b ;
int count ;
while(cin.hasNextBigInteger()){
a = cin.nextBigInteger() ;
b = cin.nextBigInteger() ;
if(a.compareTo(BigInteger.ZERO) == 0 && b.compareTo(BigInteger.ZERO) == 0){
break ;
}
count = 0 ;
for(i = 1 ; i <= 600 ; i ++){
if(b.compareTo(f[i]) < 0)
break ;
if(a.compareTo(f[i]) <= 0 && b.compareTo(f[i]) >= 0){
count ++ ;
}
}
System.out.println(count) ;
}
}
}