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){}
}
}
比较水的一个题目
题意很简单 :
给出俩数,求出这俩数之间有几个斐波那契数:但是需要注意的是:
题目中开始三个位: 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){}
}
}
相关文章推荐
- 模板 大数的斐波那契额数列(可以用来求大数加法)
- 斐波那契数列取模(大数)分治算法
- 斐波那契数列取模(大数)分治算法
- 80x86 汇编语言编程:斐波那契数列--大数处理
- Sicily E1_fib1 斐波那契数列取模(大数)分治算法
- 斐波那契额数列+大数加法
- 大数斐波那契数列
- 斐波那契数列大数加法
- 数列极差和大数模板
- 斐波那契数列-switch很有意思的一种写法
- 斐波那契数列规律的解释及实现
- 矩阵乘法快速幂 codevs 1574 广义斐波那契数列
- 问题 : 来简单地数个数(大数模拟计算斐波那契数+区间数数)
- 滚动数组实现斐波那契数列...
- 斐波那契数列
- 斐波那契数列的第N项
- 写个计算斐波那契数列的程序
- 斐波那契数列求青蛙跳台阶问题
- 栈实现斐波那契数列递归过程的非递归模拟
- 斐波那契数列算法分析