(高精度运算4.7.31)POJ 2413 How many Fibs?(大数累加)

2014-11-24 08:34:26 · 作者: · 浏览: 0
 
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 );  
        }  
    }  
}