2009-12-15 58 views
4

我试图找到Fibonacci序列中的第一个数字以包含N个数字(N是在500和2000范围内的某个地方)。我尝试用下面的代码来做到这一点:斐波那契序列算法

BigInteger num = BigInteger.valueOf(2); 
BigInteger num1 = BigInteger.ONE; 
BigInteger num2 = BigInteger.ONE; 
int record = 0; 
BigInteger TEN = BigInteger.valueOf(10); 

public BigInteger run() 
{ 
    BigInteger temp = BigInteger.ZERO; 
    while(num2.compareTo(TEN.pow(SomeN - 1)) < 0) 
    { 
     if(num2.compareTo(TEN.pow(record + 1)) >= 0) 
     { 
      System.out.println(""+record); 
      record++; 
     } 

     temp = num1.add(num2); 
     num1 = num2; 
     num2 = temp; 

     num = num.add(BigInteger.ONE); 
    } 
    System.out.println(""+num); 
    System.out.println(""+num2); 
    return num2; 
} 

的问题是,当我测试了1500个数字,我得到的答案显然是错误的。我不知道答案应该是什么,我甚至在周围检查了答案,以防我的算法关闭10次幂(即我检查了1499个数字和1501),但无济于事。任何人看到有什么不对?

+0

你是否在任何一个项目欧勒问题的工作? – 2009-12-15 20:54:29

+0

记录应该是什么?我在while子句中得到条件,但不是在if中的条件。 – Juan 2009-12-15 20:55:23

+0

是的,我是。我不是在寻找答案,我只是在这里看到了什么问题。我的方法是有效的,并且当我将println()放入检查打印的序列时,我得到了一个正确的序列(至少对于前40个整数)为斐波纳契... – Jonathan 2009-12-15 20:56:56

回答

1

(删除大错特错提示)

编辑:EP网站是备份,并使用代码时,我得到的答案符合什么网站认为正确,我,遥想当年。

+0

谢谢你没有给出答案,哈哈。 =) – Jonathan 2009-12-15 21:05:16

+0

它似乎正常工作,直到至少在序列中的第500个数字:) – Bozho 2009-12-15 21:05:52

+0

我再次检查(再次),我得到13输入N = 2和144 N = 3。 – Jonathan 2009-12-15 21:08:11

0

当然,没有理由在这里使用biginteger表单。在一行代码中,log10就足够了。 binet在那里,这样做...