尽管使用 long int ,但在Fibonacci序列中添加大数字时,我得到负输出。如何解决?
#include <iostream>
using namespace std;
void main() {
long int sum = 2;
long int f1 = 1, f2 = 2, f3;
for (unsigned int i = 2; i < 4000000; i++) {
f3 = f2 + f1;
if (!(f3 % 2)) {
sum += f3;
}
swap(f1, f2);
swap(f2, f3);
}
cout << sum << endl;
}
输出为-1833689714
答案 0 :(得分:5)
如您所见{47},第47个Fibonacci数超出了32Bit / 4Byte整数的范围。之后的一切都会变成消极的。
对于您的程序,您使用的long int可能是32位或64位宽,C ++标准并不保证(出于好的理由)。如果我看到你的结果,对我来说似乎是32位。
首先,为了防止消极,你可以使用unsigned long int,这会使你的所有结果都是正数,并且能够为“稍微”更大的数字建模。
但是,如果传递第47个Fibonacci数字,由于数据类型仍然太小,您仍会得到错误的结果。要解决此问题,您可以使用unsigned long long或uint64_t。
请记住即使对于可以表示大约数字的数字的大数据类型。在第89次迭代中,18万亿/五十亿(10 ^ 18)斐波那契数超过了这个数。
答案 1 :(得分:0)
尝试使用此代码:
#include<iostream>
using namespace std;
int main()
{
cout<<"Enter Number:";
unsigned long long int x;
cin>>x;
unsigned long long int a=0,b=1,c;
cout<<a<<"\t"<<b;
for(int i=0;i<x;i++)
{
c=a+b;
cout<<"\t"<<c;
a=b;
b=c;
return 0;
}
}