我正在从事数学作业,而不是需要编程的任何作业,但是由于我喜欢它,所以我尝试为某些作业做它,只是看我是否可以。这个正在写一个整数作为斐波那契数的总和。这是它的代码:

#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,但得到的数值很大(正数和负数),我太懒了,因为它们大约有30个左右,所以我看不出它们是否真的相加了100。我不确定这将来自何处。

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将在空间满时自动重新分配空间。

关于c++ - 程序无法正确计算减法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35546913/

10-14 15:19