程序未正确计算减法
Program not computing subtraction properly
我正在做一个数学作业,而不是任何需要编程的东西,但因为我喜欢它,我试着做一些作业,看看我是否可以。这个是将一个整数写成斐波那契数的总和。这是它的代码:
#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
两次。
这意味着,如果您尝试在此之后设置它的任何元素,您将遇到未定义的行为。您访问了不属于您的内存。
相关文章:
- 用C++程序计算圆锥体的体积、球体的体积、八边形的面积和两点之间的距离
- 3-3. 编写一个程序来计算每个不同单词在其输入中出现的次数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- C++用于计算移动平均线的程序
- 我的C++级数计算程序出了什么问题?被困了好几个星期
- 使用 C++ 和 OOP 创建面积计算程序
- 我正在尝试编写一个简单的计算程序,但答案一直返回为 0
- 在c++上创建税务计算程序,错误为未初始化的局部变量
- 不计算程序中的最低和最高成绩。(C++)(流)
- 精确计算C++程序所使用的内存
- 使用OpenMP C++并行计算程序的积分
- 计算C++程序中留下评论的行数
- 计算程序形状的法线
- 如何计算程序的空间复杂度
- C++利息计算程序
- 计算程序集中每个任务的准确 CPU 使用率
- c++计算程序没有响应
- 计算程序中的估计时间
- 如何使大型计算程序更快