hdu--1316--How Many Fibs?(java大数)

How Many Fibs?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6371    Accepted Submission(s): 2517


Problem Description
Recall the definition of the Fibonacci numbers: 
f1 := 1 
f2 := 2 
fn := fn-1 + fn-2 (n >= 3) 

Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b]. 
 

 

Input
The input contains several test cases. Each test case consists of two non-negative integer numbers a and b. Input is terminated by a = b = 0. Otherwise, a <= b <= 10^100. The numbers a and b are given with no superfluous leading zeros.
 

 

Output
For each test case output on a single line the number of Fibonacci numbers fi with a <= fi <= b. 
 

 

Sample Input
10 100
1234567890 9876543210
0 0
 

 

Sample Output
5
4
 
 1 import java.util.Scanner;
 2 import java.math.*;
 3 
 4 /**
 5  * @author 日天大帝
 6  * 第480个斐波数是101位,打个表开480够用
 7  */
 8 public class Main {
 9     public static void main(String[] args) {
10         Scanner cin = new Scanner(System.in);
11         final int MAX = 480;
12         BigInteger arr[] = new BigInteger[MAX];
13         arr[0] = BigInteger.ONE;
14         arr[1] = BigInteger.valueOf(2);
15         for(int i=2; i<MAX ; ++i){
16             arr[i] = arr[i-1].add(arr[i-2]);
17         }
18         while(cin.hasNext()){
19             BigInteger a = cin.nextBigInteger();
20             BigInteger b = cin.nextBigInteger();
21             if(a.compareTo(b) == 0 && a.compareTo(BigInteger.ZERO) == 0)break;
22             int ct = 0;
23             for(int i=0;; ++i){
24                 if(arr[i].compareTo(b) > 0)break;
25                 if(arr[i].compareTo(a) >= 0)ct++;
26             }
27             System.out.println(ct);
28         } 
29     }
30 }

 

 

posted @ 2017-04-27 20:06  朤尧  阅读(331)  评论(0编辑  收藏  举报