我正在尝试实现这个函数来添加两个动态的 a ray,但是当我将它实现到我的 main 中时它完全崩溃了,我不知道为什么......
我不明白为什么程序会关闭,除了 scite 上的退出代码说退出代码 255。但这没有帮助。知道问题可能是什么吗?
You have a typo on this line:
for (j=max-1; j>0 && sum[j]==0; --j);
^here
The next statement int *tmp=sum;
does not get executed.
Also the for loop should probably be
for (j=max-1; j>=0 && sum[j]==0; --j)
^ //don't forget the last member
C++ 的一些优点是所有标准容器(如std::vector
)和可用的标准算法。例如,您可以使用向量和反向迭代器并std::find_if_not
找到最后一个非零值。
喜欢
// Create a vector of a specific size, and initialize it
std::vector<int> sum(std::max(a->degree, b->degree), 0);
// Fill it up...
// Find the last non-zero value
auto last_non_zero = std::find_if_not(sum.rbegin(), sum.rend(),
[](const int& value){ return value == 0; });
if (last_non_zero == sum.rbegin())
{
// No zeroes found
}
else if (last_non_zero == sum.rend())
{
// All of it was zero
sum.clear();
}
else
{
std::vector<int> temp(last_non_zero, sum.rend())
std::reverse(temp); // Because the `temp` vector is reversed
sum = temp;
}
在此之后,向量sum
应该被去除尾随零。
对于一个:
for (int k=0; k<=max; k++)
这超出了范围。[max+1]
而是为元素分配内存,因为多项式中应该有max+1
项。
sum = new int[ max + 1 ];
此外,j
循环应该从max
.
for (j=max; j>0 && sum[j]==0; --j);