题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1316
题目描述:


给你一个范围,问你在这个范围内有多少斐波拉契数。
代码实现:
1 1 import java.util.Scanner; 2 2 import java.math.BigInteger; 3 3 public class Main{ 4 4 5 5 @SuppressWarnings("null") 6 6 public static void main(String[] args) { 7 7 Scanner cin=new Scanner(System.in); 8 8 int sum=0; 9 9 BigInteger []big=new BigInteger[1005];//定义一个BigInteger类型的数组 1010 big[1]=BigInteger.valueOf(1); 1111 big[2]=BigInteger.valueOf(2); 1212 //先将前1005个斐波拉契数求出来放在big数组里面 1313 for(int i=3;i<1005;i++){ 1414 big[i]=big[i-1].add(big[i-2]);//大数相加,第i个数=第i-1个数+第i-2个数 1515 } 1616 while(cin.hasNext()) 1717 { 1818 BigInteger a = cin.nextBigInteger(); 1919 BigInteger b = cin.nextBigInteger(); 2020 //如果a=0&&b=0,输入结束 2121 if(a.compareTo(BigInteger.valueOf(0))==0&&b.compareTo(BigInteger.valueOf(0))==0) return; 2222 for(int i=1;i<1005;i++){ 2323 //如果big[i]这个数处在[a,b]范围内,sum+1 2424 if(big[i].compareTo(a)>=0&&big[i].compareTo(b)<=0){ 2525 sum++; 2626 } 2727 } 2828 System.out.println(sum); 2929 sum=0; 3030 } 3131 cin.close(); 3232 } 3333 }