2009-12-15 4 views
4

피보나치 시퀀스의 첫 번째 숫자를 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

혹시 프로젝트 오일러 문제에 대해 당신은 일하고 있습니까? –

+0

기록이란 무엇입니까? while 절에는 조건이 있지만 if 절에는 조건이 없습니다. – Juan

+0

예, 있습니다. 나는 대답을 찾고있는 중이 아니며, 나는 여기서 잘못된 점에 난처한 상황에 처해있다. 필자의 접근 방식은 유효하며 println()을 사용하여 시퀀스 인쇄를 확인하면 fibonacci에 대한 정확한 시퀀스를 얻고 있습니다. – Jonathan

답변

1

(기본 힌트 오프 삭제 방법)

편집 : EP 웹 사이트를 백업하고, 코드를 사용할 때 얻을 대답은 웹 사이트가 돌아 오는 때, 나를 위해 올바른으로 인정 것과 일치.

+0

답변을 제공하지 않으셔서 감사합니다, 롤. =) – Jonathan

+0

시퀀스에서 적어도 500 번째 숫자까지 잘 작동하는 것 같습니다. – Bozho

+0

두 번 확인 (다시)하면 입력 N = 2에서 13, N = 3에서 144가됩니다. – Jonathan

0

물론 여기서 biginteger 형식을 사용할 이유가 없습니다. 한 줄의 코드에서 log10이면 충분합니다. 거기 binet, 그 일을 ...