您的位置:首页 > 其它

TOJ 1345 大数斐波那契数列

2014-07-21 18:34 260 查看
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){}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: