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