TOJ 1345 大数斐波那契数列

来源:互联网 发布:阿里云域名 编辑:程序博客网 时间:2024/05/21 04:00

TOJ 1345  How Many Fibs?比较水的一个题目

题意很简单 :给出俩数,求出这俩数之间有几个斐波那契数:但是需要注意的是: 

题目中开始三个位: 1 2 3 ,而不是常用的:1 1 2 3 ,另外考虑到大数,就直接java 了; fibs[500]就已经超过了100位:
代码:

import java.math.BigInteger;import java.util.Scanner;public class Main {public static void main(String[] args){try{BigInteger[] fib = new BigInteger[500];fib[1]=new BigInteger("1");fib[2]=new BigInteger("2");for(int i=3;i<500;i++){fib[i]=fib[i-1].add(fib[i-2]);}String a,b;Scanner in = new Scanner(System.in);while(in.hasNext()){a=in.next();b=in.next();BigInteger f1=new BigInteger(a);BigInteger f2 =new BigInteger(b);if(f1.compareTo(new BigInteger("0"))==0&&f2.compareTo(new BigInteger("0"))==0)break;int left=0,right=0;boolean flag=false;for( int i=1;i<500;i++){BigInteger t1=fib[i].subtract(f1);BigInteger s1=fib[i+1].subtract(f1);BigInteger t2=fib[i].subtract(f2);BigInteger s2=fib[i+1].subtract(f2);if(!flag&&t1.signum()==1)left=1;if(t1.signum()==-1&&s1.signum()==1) {left=i+1;flag=true;}// 找到大于等于左边的数的最小下标if(t1.signum()==0) {left=i;flag=true;}if((t2.signum()==-1&&s2.signum()==1)||t2.signum()==0){right=i;break;}//找出小于等于右边数的最大小标}System.out.println(right-left+1);}}catch(Exception e){}}}



0 0