首页 > 解决方案 > 使用向量的斐波那契数列

问题描述

我必须编写以下斐波那契,但我想用一个向量来向我的老师展示我正在远离所有课程,但我有几个这样的警告:

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];
        }
    }
}

标签: c++

解决方案


问题是您正在尝试更改向量的元素,但向量实际上是空的。

你可以做两件事

  1. 当你vector<int> table(n);以这种方式声明你的向量时,你告诉它有n未初始化的元素,所以稍后你可以重新分配它们的值。
  2. 或者将新元素附加到向量:

    #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;

对于更大的值,您可以使用外部库。


推荐阅读