修改后的 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
的用法。
好的,我正在做 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
的用法。