这是我编写的代码,没有编译器错误,但无法正常工作。你能帮我修复一下吗
class Polynomial {
public:
int coef;
int pow;
Polynomial* next;
//Default Constructor
Polynomial()
{
coef = 0;
pow = 0;
next = NULL;
}
Polynomial(int kat, int üssü)
{
coef = kat;
pow = üssü;
next = NULL;
}
};
Polynomial* add(Polynomial* p1, Polynomial* p2) {
Polynomial* add = new Polynomial;
Polynomial* add2 = add;
while (p1->next && p2->next) {
if (p1->pow > p2->pow) {
add->pow = p1->pow;
add->coef = p1->coef;
p1 = p1->next;
}
else if (p1->pow < p2->pow) {
add->pow = p2->pow;
add->coef = p2->coef;
p2 = p2->next;
}
else {
add->pow = p1->pow;
add->coef = (p1->coef + p2->coef);
p1 = p1->next;
p2 = p2->next;
}
add->next = new Polynomial;
add = add->next;
add->next = NULL;
}
while (p1->next || p2->next ) {
if (p1->next) {
add->coef = p1->coef;
add->pow = p1->pow;
p1 = p1->next;
}
if (p2->next) {
add->coef = p2->coef;
add->pow = p2->pow;
p2 = p2->next;
}
add->next = new Polynomial;
add = add->next;
add->next = NULL;
}
return add2;
}
例如,当我尝试将这两个策略相加时,结果为2x ^ 2 + 1x ^ 2 = 0x ^ 0
3x ^ 5 + 2x ^ 3 + 2x ^ 24x ^ 4 + 3x ^ 3 + 1x ^ 2+ __________________3x ^ 5 + 4x ^ 4 + 5x ^ 3 + 0x ^ 0 +If you want to see console output
几个问题。
1)您错过了每个多项式的最后一项,因为
while (p1->next && p2->next)
应该是
while (p1 && p2)
和
while (p1->next || p2->next)
应该是
while (p1 || p2)
这就是为什么您在输出中看不到3x^3
的原因。
2)在将一个节点添加到新多项式之前,您知道需要添加一个。这就是为什么您在输出中看到0x^0
的原因。
您可以这样更改循环
Polynomial* add(Polynomial* p1, Polynomial* p2) {
Polynomial* add2 = NULL;
while (p1 && p2) {
Polynomial* add = new Polynomial;
...
add->next = NULL;
if (add2 == NULL)
add2 = add;
}
while (p1 || p2) {
Polynomial* add = new Polynomial;
...
add->next = NULL;
if (add2 == NULL)
add2 = add;
}
return add2;
}
未经测试的代码。