现在的位置: 首页 > 综合 > 正文

HDOJ 1316 How Many Fibs?(Java大数开挂)

2019年02月12日 ⁄ 综合 ⁄ 共 663字 ⁄ 字号 评论关闭

题意是说给一段范围,求包括了多少个菲波拉契数。

于是取两个大数,互相加,加到在范围内时开始计数即可。。。

import java.io.*;
import java.util.*;
import java.math.*;

public class Main {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		BigInteger fib1, fib2;
		BigInteger a, b;
		while(in.hasNext()) {
			int cnt = 0;
			fib1 = BigInteger.valueOf(1);
			fib2 = BigInteger.valueOf(2);
			a = in.nextBigInteger();
			b = in.nextBigInteger();
			if(a.equals(BigInteger.valueOf(0)) && b.equals(BigInteger.valueOf(0))) {
				break;
			}
			while(true) {
				if(fib1.compareTo(a) >= 0 && fib1.compareTo(b) <= 0) {
					cnt++;
				}
				if(fib2.compareTo(a) >= 0 && fib2.compareTo(b) <= 0) {
					cnt++;
				}
				if(fib1.compareTo(b) > 0 || fib2.compareTo(b) > 0) {
					break;
				}
				fib1 = fib1.add(fib2);
				fib2 = fib2.add(fib1);
			}
			System.out.println(cnt);
		}
	}

}

抱歉!评论已关闭.