Почему вывод кода CPP не работает для "832564823476" в качестве ввода? - PullRequest
0 голосов
/ 12 декабря 2018

В настоящее время я зачислен на курсы по структуре данных и алгоритмам в Coursera.Я столкнулся с проблемой в качестве моего задания.Задача говорит найти последнюю (единичную) цифру суммы n-членов последовательности Фибоначчи.

Например: Вход: 3
Выход: 4
F0 + F1 + F2 + F3 = 0 + 1 + 1 + 2 = 4

Решение для этого я предоставилбыло:

#include <iostream>
using namespace std;

int lastDigit=0;
int fibLastDigit(unsigned long long);

int main() {
    unsigned long long terms;
    cin>>terms;         //0<=n<=10^18
    cout<<fibLastDigit(terms);
    return 0;
}

int fibLastDigit(unsigned long long nTh) { 
    int first=0, second=1, third;
    if(nTh == 0) {
        lastDigit = first;
        return lastDigit;
    }
    else if(nTh == 1) {
        lastDigit = second;
        return lastDigit;
    }
    else if(nTh > 1) { 
        lastDigit = 1;
        while(nTh>=2) {
            first = first % 10;
            second = second % 10;
            third = ((first + second)%10);
            first = second;
            second = third;
            lastDigit = (lastDigit + third) % 10;
            nTh--;

        }

    }
    return lastDigit;
}

Но код не работает для 832564823476. Консоль зависает и не выводит никаких данных.

1 Ответ

0 голосов
/ 12 декабря 2018

Сумма первых n чисел Фибоначчи F(n) равна F(n+2)-1 ( источник ).Вас интересует последняя цифра этого числа.

Теперь учтите, что последняя цифра F(n) зависит только от последних цифр F(n-1) и F(n-2).Таких пар может быть не более 100, поэтому последовательность последних цифр должна повториться.Действительно, lastDigitOf(F(n)) = lastDigitOf(F(n+60)) (см., Например, здесь ), так что вы сможете найти алгоритм, который на намного быстрее, чем у вас сейчас.Тогда ваша консоль больше не будет «зависать» (т.е. ждать завершения алгоритма).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...