加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 04:02:22 所属栏目:大数据 来源:网络整理
导读:题目大意:输入a,b,求在[a,b]之间的斐波那契数的个数 解题思路:大数。 1)对于a.compareTo(b)。如果ab,则返回值0,为负数。如果a==b,则返回值为0,如果ab,则返回值0,为整数 代码如下: package com.njupt.bigInteger;import java.math.BigInteger;import j

题目大意:输入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);
				
		}
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读