修改后的 Fibonacci C++ 得到一个大的负数

Modified Fibbonaci C++ getting a large negative number

好的,我正在做 hackerrank 的斐波那契修正题。只有当迭代达到 8 时,我才能解决这个问题,并且它开始返回一个大的负数。我认为这是因为整数溢出,所以我将我的类型更改为 unsigned long long 但问题仍然存在。感谢任何帮助。

Link 原题:https://www.hackerrank.com/challenges/fibonacci-modified/problem

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int modFib(unsigned t1, unsigned t2, unsigned n) {
        if (n == 1) {
            return t1;
        } 
        else if (n == 2) {
            return t2;
        } else {
            return modFib(t1, t2, n-2) + (modFib(t1, t2, n-1) * modFib(t1, t2, n-1));
        }
    }
    
    int main() {
        cout << modFib(0, 1, 10) << endl;
        return 0;
    }

//Expected output is 84266613096281243382112
//I get -1022889632

在 C++ 中,unsigned int 的一般范围是 0 to 4,294,967,295,因此使用 unsigned int 不适合这个问题。

预期输出实际上大于 unsigned long long int 的最大可能值,它来自 0 to 18,446,744,073,709,551,615。这意味着您不能使用这些数据类型中的任何一种来解决此问题。

对于如此大的值,您应该查看 BigNums 的用法。