Rahul Dhankhar
Rahul Dhankhar

Reputation: 93

Cpp program not giving output

I am creating a script that calculates the sum of first n Fibonacci numbers and returns the last digit of the sum. The python script works perfect but the C++ script does not and the logic is same.

Any help will be appreciated.

Python Code

def calc_fib(n):

    f = [0, 1]
    for i in range(2, 61):
        f.insert(i, (f[i-1] + f[i-2]) % 10)
    rem = n % 60
    quotient =  (n - rem) / 60
    return int((sum(f) * quotient + sum(f[0: rem+1])) % 10)

n = int(input())
print(calc_fib(n))

C++ Code

#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

long long fibonacci_sum_last_digit(long long n) {
    vector<int> f(n + 1);
    f[0] = 0;
    f[1] = 1;
    for (int i = 2; i <= 60; i++){
        f[i] = (f[i-1] + f[i-2]) % 10;
    }
    int rem = n % 60;
    int quotient = (n - rem) / 60;
    return (accumulate(f.begin(), f.end(), 0) * quotient + accumulate(f.begin(), f.begin() + rem + 1, 0)) % 10;
}

int main() {
    int n;
    cin >> n;
    if (n <= 1)
        cout << n;
    else
        cout << fibonacci_sum_last_digit(n) << '\n';
    return 0;
}

Upvotes: 0

Views: 56

Answers (1)

Martin Morterol
Martin Morterol

Reputation: 2870

vector<int> f(n + 1);
f[0] = 0;
f[1] = 1;
for (int i = 2; i <= 60; i++){
    f[i] = (f[i-1] + f[i-2]) % 10;
}

The vector is size n+1 and you access until 60 => it's a bug

This should fix :

vector<int> f(60 + 1);

Or

vector<int> f; 
f.push_back(0);
f.push_back(1);
for (int i = 2; i <= 60; i++){
    f.push_back((f[i-1] + f[i-2]) % 10);
}

Upvotes: 4

Related Questions