微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

hdu 1316(大数——求一定范围内斐波那契数的个数)

题目大意:输入a,b,求在[a,b]之间的斐波那契数的个数


解题思路:大数。

1)对于a.compareto(b)。如果a<b,则返回值<0,为负数。如果a==b,则返回值为0,如果a>b,则返回值>0,为整数


代码如下:

package com.njupt.bigInteger;

import java.math.BigInteger;
import java.util.Scanner;

public class HDU_1316_2 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(system.in);
		BigInteger a,b;
		
		BigInteger fib[] = new BigInteger[501];
		
		fib[1] = new BigInteger("1");
		fib[2] = new BigInteger("2");
		//f[500]已达105位,已经大于10^100
		for(int i = 3 ; i <= 500 ; i++){
			fib[i] = fib[i-1].add(fib[i-2]);
		}
		BigInteger zero = new BigInteger("0");
		
		while(scanner.hasNextBigInteger()){
			a = scanner.nextBigInteger();
			b = scanner.nextBigInteger();
			if(a.compareto(zero) == 0 && b.compareto(zero) == 0){
				break;
			}
			
			int count = 0;
			for(int i = 1; i <= 500 ; ++i){
				if(a.compareto(fib[i])<=0 && b.compareto(fib[i])>=0){//a<=f[i]<=b
					count++;
				}else if(b.compareto(fib[i]) < 0){//f[i]>b
					break;
				}
				
				
			}
			
			System.out.println(count);
				
		}
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐