这是我编写的C ++程序,用于获取斐波纳契数从1到100。
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
int n;
vector<double> f;
//adding first two fibonacci numbers to vector
f.push_back(0);
f.push_back(1);
cout<<"How many fibonacci numbers do you want : ";
cin>>n;
for(int i=0; i<n; i++)
{
if(i>1) f[i] = f[i-1] + f[i-2];
cout<<(i+1)<<": "<<fixed<<setprecision(0)<<f[i]<<endl;
}
}
所有结果在79个值之前都是正确的,但在第80个值之后,则不完全是78和79个值的总和。输出为:
....
78: 5527939700884757
79: 8944394323791464
80: 14472334024676220
....
这里最后一位应为1,但显示为0,为什么会发生这种情况?
您可能不对向量中尚不存在的向量元素使用下标运算符。
例如使用
if(i>1) f.push_back( f[i-1] + f[i-2] )
;
请注意,double
类型的对象可能无法正确存储给定范围内的所有斐波那契数。除了类型double
,还可以使用类型long double
。