您的位置:首页 > 其它

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

2013-11-15 13:04 561 查看
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 );
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: