Я пытаюсь написать умножить 2 полинома с помощью оператора перегрузки *
Это перегруз * функция
Polynomial Polynomial::operator * (const Polynomial &right)
{
Polynomial temp;
temp.setPolynomial(right.maxExp + maxExp + 1);
for (int i = 0; i < maxExp; i++)
{
for (int j = 0; j < right.maxExp; j++)
temp.poly[1][i+j] += poly[0][i] * right.poly[0][j];
}
return temp;
}
Результат массива, где 1-я строка представляет собой коэффициенты, а вторая строка хранит показатели.
The first (original) polynomial is: (degree = 4, F = x^2)
0 0 1 0 0
0 0 2 0 0
The second polynomial is: (degree = 4, F = x^2)
0 0 1 0 0
0 0 2 0 0
The result polynomial is: // the location of the result is right (x^4)
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0
Полиномиальный класс
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; // get the maxExp (highest exponent)
int getCoefficient(int,int) const; // get a specific exponential value
// overloading operators
void operator=(const Polynomial &); // assignment
Polynomial operator+(const Polynomial &); // addition
Polynomial operator-(const Polynomial &); // substraction
Polynomial operator*(const Polynomial &);
}
Вопрос: что не так с моим кодом, который выдает эти значения? Спасибо!
При этом вы обновляете показатель результата с помощью нескольких коэффициентов;
temp.poly[1][i+j] += poly[0][i] * right.poly[0][j];
Я думаю, что код должен быть
for (int j = 0; j < right.maxExp; j++)
{
temp.poly[0][i+j] += poly[0][i] * right.poly[0][j];
if (temp.poly[0][i+j] != 0)
temp.poly[1][i+j] = i+j;
}
Также я думаю, что в вашем коде хранение показателей является избыточной информацией, поскольку позиция в самом массиве отражает показатель степени
Других решений пока нет …