Алгоритм последовательности Фибоначчи - PullRequest
4 голосов
/ 15 декабря 2009

Я пытаюсь найти первое число в последовательности Фибоначчи, содержащее 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), но безрезультатно. Кто-нибудь видит, что не так?

Ответы [ 2 ]

1 голос
/ 16 декабря 2009

(удалено от базовой подсказки)

РЕДАКТИРОВАТЬ: веб-сайт EP восстановлен, и ответ, который я получаю при использовании вашего кода, соответствует тому, что веб-сайт принял как правильный для меня, когда.

0 голосов
/ 16 декабря 2009

Конечно, нет никакой причины использовать здесь форму biginteger. log10 будет достаточно в одной строке кода. Бине там, сделал это ...

...