【发布时间】:2016-02-22 06:15:46
【问题描述】:
我正在做数学作业,不是任何需要编程的东西,但因为我喜欢它,所以我尝试为一些作业做它,看看我是否可以。这个是写一个整数作为斐波那契数的总和。这是它的代码:
#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] 也达到 2 对于某些 i。它计算这个罚款并进入 if 语句。但是当它执行total -= fib[i] 时,它会生成total = -1,从而破坏了代码。
关于如何解决此问题的任何建议?
编辑:不只是 7。我尝试了 100,得到了非常大的(正数和负数)数字,我懒得看它们是否真的加起来为 100,因为大约有 30 个左右。我不确定这是从哪里来的。
Edit2:#100 的问题不在于它不起作用,而是对于任何有类似情况的人来说,该值对于 int 来说太大了。
【问题讨论】:
标签: c++ subtraction