我设计了这个程序,可以打印斐波那契系列(series[i] = series[i-1] + series[i-2])但我不能得到超过47个数字,因为第48个它们变成负数和奇数(我认为这发生在列表超出范围或项目为空时):
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
int length;
string again = "";
do {
cout << "Enter the length you want in your sequence: ";
cin >> length;
vector<int> series(length);
for (int n=0; n<=1; n++) series[n] = n;
for (int number=2; number<=length; number++) {
series[number] = series[number-1] + series[number-2];
}
for (int i=0; i<length; i++) cout << series[i] << " ";
cout << endl << "Do it again ? <y/n> ";
cin >> again;
cout << endl;
} while (again == "y");
}
Run Code Online (Sandbox Code Playgroud)
编辑:
"改进"代码:
#include <iostream>
#include <vector>
#include <string>
std::vector<int> fibonacci (int length)
{
std::vector<int> series(length);
series[0] = 0;
series[1] = 1;
for (int num=2; num<length; num++) {
series[num] = series[num-1] + series[num-2];
}
return series;
}
int main ()
{
std::string again;
do {
std::cout << "Enter how many numbers you want in your series: ";
int length;
std::cin >> length;
std::vector<int> series(length);
series = fibonacci(length);
for (int n=0; n<length; n++) std::cout << series[n] << " ";
std::cout << "\nDo it again <y/n> ? ";
std::cin >> again;
std::cout << std::endl;
} while (again == "y");
}
Run Code Online (Sandbox Code Playgroud)
当你达到第47个值时,数字超出int范围.最大值int是2,147,483,647,第46个数字正好在下面1,836,311,903.第47个数字超过了最大值2,971,215,073.
另外,正如LeonardBlunderbuss所提到的,你已经超出了for你拥有的循环向量的范围.向量开始于0,因此将调用number<=length;该range+1元素.范围只能达到length-1.