package com.njupt.acm;
import java.math.BigInteger;
import java.util.Scanner;
public class POJ_2413 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
BigInteger[] fibs = new BigInteger[501];
fibs[1] = new BigInteger("1");
fibs[2] = new BigInteger("2");
int i;
for(i = 3 ; i < 501 ; ++i){//李先计算斐波那契数列
fibs[i] = fibs[i-1].add(fibs[i-2]);
}
BigInteger zero = new BigInteger("0");
while(true){
BigInteger a = scanner.nextBigInteger();
BigInteger b = scanner.nextBigInteger();
if(a.compareTo(zero) == 0 && b.compareTo(zero) == 0){
break;
}
int left = 0;
int right = 0;
boolean flag1 = true;
/**
* 求一个区间有多少个斐波那契数,这时扫的不是区间,而是斐波那契数组
*/
for(i = 1 ; i < 501 ; ++i){//fib[500]就已经达到了10^100了
if(flag1 && (fibs[i].compareTo(a) == 1 || fibs[i].compareTo(a) == 0)){
left = i;
flag1 = false;
}
if( fibs[i].compareTo(b) == 1 ){//需要注意对右边界的处理
right = i;
break;
}
if( fibs[i].compareTo(b) == 0){
right = i+1;
break;
}
}
System.out.println(right - left );
}
}
}
(高精度运算4.7.31)POJ 2413 How many Fibs?(大数累加)
最新推荐文章于 2023-04-26 11:24:56 发布