2009-12-15 99 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在那裏,這樣做...