Fib迭代Fibonacci算法给我一个错误的结果(47)

我正在使用下面复制的迭代fib算法.我在Rosetta代码上发现了该算法,直到fib(46)为止,它给了我正确的答案.之后,它的值是错误的.有谁知道为什么会这样吗?

long long fibb(int n)
{
    int fnow = 0, fnext = 1, tempf;
    while(--n > 0) {
        tempf = fnow + fnext;
        fnow = fnext;
        fnext = tempf;
    }
    return fnext;   
}

输出:

Fib(46) = 1836311903            <---- Correct
Fib(47) = 18446744092385799393   <---- Wrong (Correct Answer is: 2971215073)
最佳答案
请注意,您在代码中使用int类型的临时变量,而不是long long int类型.这意味着,如果要处理足够大的斐波那契数,将在代码中产生整数溢出.特别是,第47个斐波那契数是2,971,215,073,该数字太大而无法容纳带符号的32位整数,因此您将发生溢出.

将临时变量更改为long long int类型(或者更好的是uint64_t)应该可以解决此问题.

转载注明原文:Fib迭代Fibonacci算法给我一个错误的结果(47) - 代码日志