我正在编写将2个多项式加在一起的函数,2个多项式具有相同的最高度(不需要输入所有项)的情况工作正常,但两个多边形具有不同程度的情况不是工作时,函数以某种方式存储一些大的值作为系数
这是功能
// overload +
Polynomial Polynomial::operator+(const Polynomial &right)
{
// get the highest exponent value for result
int highestExp = 0;
if (maxExp < right.maxExp)
highestExp = right.maxExp;
else if (maxExp >= right.maxExp)
highestExp = maxExp;
Polynomial res;
res.setPolynomial(highestExp);
for (int coeff=0; coeff < highestExp; coeff++)
res.poly[0][coeff] = poly[0][coeff] + right.poly[0][coeff];
return res;
}
例如,case1:最高exps相等
The first (original) polynomial is:
- 4x^0 + x^1 + 4x^3 - 3x^4
The second polynomial is:
- x^0 - x^3
The result polynomial is:
- 5x^0 + x^1 + 3x^3 - 3x^4
case2:最高指数不相等
The first (original) polynomial is:
- 4x^0 + x^1 + 4x^3 - 3x^4 (highest exp = 4)
The second polynomial is:
- x^0 - x^3 (highest exp = 5)
The result polynomial is:
- 5x^0 + x^1 + 3x^3 - 3x^4 - 33686019x^5 (highest exp = 5)
请帮忙!
更新:多项式课程
class Polynomial
{
private:
int **poly;
int maxExp;
void createPolynomialArray(int);
public:
Polynomial();
Polynomial(int); // constructor
Polynomial(const Polynomial &); // copy constructor
~Polynomial(); // destructor
// setter
void setCoefficient(int,int);
void setPolynomial(int);
// getters
int getTerm() const;
int getCoefficient(int,int) const;
// overloading operators
void operator=(const Polynomial &); // assignment
Polynomial operator+(const Polynomial &); // addition
}
答案 0 :(得分:1)
我想你想要
Polynomial Polynomial::operator+(const Polynomial &right)
{
Polynomial res;
if(maxExp < right.maxExp)
{
res.setPolynomial(right.maxExp);
int coeff = 0;
for (; coeff < maxExp; coeff++)
res.poly[0][coeff] = poly[0][coeff] + right.poly[0][coeff];
for (; coeff < right.maxExp; coeff++)
res.poly[0][coeff] = right.poly[0][coeff];
}
else
{
res.setPolynomial(maxExp);
int coeff = 0;
for (; coeff < right.maxExp; coeff++)
res.poly[0][coeff] = poly[0][coeff] + right.poly[0][coeff];
for (; coeff < maxExp; coeff++)
res.poly[0][coeff] = poly[0][coeff];
}
return res;
}
您正在读取较短多项式的结尾。
答案 1 :(得分:0)
您似乎缺少检查数组访问的边界。您看到奇怪值的原因是,在这种情况下,程序可能正在从未初始化的内存中读取垃圾值。但这是未定义的行为,所以任何事情都可能发生。像这样的错误最糟糕的部分是它们通常似乎工作正常。
另外,我建议使用std::vector
来存储系数而不是原始指针。使用起来容易得多,容易出错。
P.S。另一个挑剔是我建议在if和for块周围使用大括号。它可以更清楚地包含所包含的代码,并降低在不更新大括号的情况下意外添加额外行的风险。或天堂禁止,有人使用多线宏。但这是一个品味问题。