程序未正确计算减法

Program not computing subtraction properly

本文关键字:计算 程序      更新时间:2023-10-16

我正在做一个数学作业,而不是任何需要编程的东西,但因为我喜欢它,我试着做一些作业,看看我是否可以。这个是将一个整数写成斐波那契数的总和。这是它的代码:

#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int main()
{
  vector<int> fib;
  vector<int> sum;
  int n = 0;
  int total = 0;
  cout << "Enter a number." << endl;
  cin >> n;
  total = n;
  fib.push_back(1);
  fib.push_back(1);
  for(int i = 2; i <= n; i++)
  {
    fib[i] = fib[i-1] + fib[i-2];
  }
  for(int i = n; i >= 0; i--)
  {
    if(total - fib[i] >= 0)
    {
      sum.push_back(fib[i]);
      total -= fib[i];
    }
    if(total == 0)
    {
      break;
    }
    if(total < 0)
    {
      cout << "Program Error. Exiting" << endl;
      exit(1);
    }
  }
  cout << "The sequence of the fewest Fibonacci numbers adding to " << n << " is:" << endl;
  for(int i = 0; i < sum.size(); i++)
  {
    cout << sum[i] << endl;
  }
  return(0);
}

在我尝试输入数字 7 之前,它似乎运行良好。

当它到达if(total - fib[i] >= 0)时,它会按预期工作。 total应该下降到2,fib[i]在某些i也达到2。它计算此罚款并进入 if 语句。但是当它确实total -= fib[i]时,它会total = -1,从而破坏代码。

关于如何解决此问题的任何建议?

编辑:不仅仅是7。我尝试了 100,得到了非常大(正数和负数)的数字,我懒得看它们是否真的加起来是 100,因为大约有 30 个左右。我不确定这是从哪里来的。

Edit2:#100 的问题不在于它不起作用,而是对于任何有类似情况的人来说,这个值对于 int

来说太大了。

更改

for(int i = 2; i <= n; i++)
{
    fib[i] = fib[i-1] + fib[i-2];
}

for (int i = 2; i <=n; i++) {
    int tmp = fib[i-1] + fib[i-2];
    fib.push_back(tmp);
}

vector<int> fib默认分配 8 个元素空间,vector[8+] 访问会导致内存错误,你应该使用 push_back(),vector 会在空间已满时自动重新分配空间。

在你的行for(int i = 2; i <= n; i++)之前,你的fib向量的大小只有 2,因为你没有为它保留任何空间,你只调用了push_back两次。

这意味着,如果您尝试在此之后设置它的任何元素,您将遇到未定义的行为。您访问了不属于您的内存。