c++ - 使用向量的斐波那契数列
问题描述
我必须编写以下斐波那契,但我想用一个向量来向我的老师展示我正在远离所有课程,但我有几个这样的警告:
main.cpp: 18: warning: implicit conversion changes signedness:
'int' to 'std::vector::size_type' (aka 'unsigned long long')
main.cpp: 18: warning: implicit conversion changes signedness:
'int' to 'std::vector::size_type' (aka 'unsigned long long')
我不明白为什么它不起作用?
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> table;
table[0] = 0;
table[1] = 1;
if (n == 0) { cout << n << endl; }
else if (n == 1) { cout << n << endl; }
else {
for (int i = 0; i < n; i++) {
table[i] = table[i - 1] + table[i - 2];
cout << table[i];
}
}
}
解决方案
问题是您正在尝试更改向量的元素,但向量实际上是空的。
你可以做两件事
- 当你
vector<int> table(n);
以这种方式声明你的向量时,你告诉它有n
未初始化的元素,所以稍后你可以重新分配它们的值。 或者将新元素附加到向量:
#include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> table; table.push_back(0); table.push_back(1); if (n == 0) { cout << n << endl; } else if (n == 1) { cout << n << endl; } else { for (int i = 2; i <= n; i++) { table.push_back(table[i - 1] + table[i - 2]); cout << table[i]; } } }
请注意,
for
从索引开始是没有意义的0
:直接从 2 开始。
编辑int
您的问题可能是,如果您在某个点输入一个大数字,斐波那契的值可能会超过可以存储
的最大值。
首先,因为您正在处理正数以扩大使用范围unsigned
。尝试将您的向量定义为vector<unsigned long int> table;
或vector<unsigned long long int> table;
。
对于更大的值,您可以使用外部库。
推荐阅读
- flutter - Flutter 在时间执行函数
- angular -
属性变换:Covid 数据跟踪器图例的 D3 图例中的预期数字“translate(NaN,NaN)” - python - Python Pulp 线性规划约束
- python - 导入语句不一致
- python - 我的 switch case 系统无法在 Python 中运行
- r - 想要计算直方图中每个 bin 的“真”百分比 ggplot2
- linux - 在另一个服务之后启动服务
- java - Java:Jar 没有在命令提示符下提供输出,但在 eclipse 中工作正常
- javascript - Vuejs:有条件地在@click上调用函数
- c - 什么是调度表?如何在 C 中实现它?