简体   繁体   中英

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;
}

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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM