#include<iostream>
#include<cmath>
using namespace std;
struct F
{
double a;
double n;
};
class Polynomial
{
private:
F* p;
int length;
public:
Polynomial();
Polynomial(int m);
Polynomial(const Polynomial& A);
~Polynomial();
void get();
void set();
Polynomial operator+(const Polynomial&A);
Polynomial operator-(const Polynomial& A);
Polynomial operator*(const Polynomial& A);
Polynomial& operator=(const Polynomial& A);
void simple();
};
Polynomial::Polynomial():length(1)
{
p = new F[1];
p[0].a = 1;
p[0].n = 1;
}
Polynomial::Polynomial(int m):length(m)
{
p = new F[length];
for (int i = 0; i < length; i++)
{
p[i].a = 1;
p[i].n = 1;
}
}
Polynomial::Polynomial(const Polynomial& A)
{
if (p)
delete p;
length = A.length;
p = new F[length];
for (int i = 0; i < length; i++)
{
p[i].a = A.p[i].a;
p[i].n = A.p[i].n;
}
}
Polynomial::~Polynomial()
{
if (p)
delete[]p;
}
void Polynomial::get()
{
for (int i = 0; i < length; i++)
{
if (i == 0)
{
if(p[i].a)
cout << p[i].a << "*x" << 'e' << p[i].n;
}
else
{
if(p[i].a>0)
cout << '+'<<p[i].a << "*x" << 'e' << p[i].n;
else if(p[i].a<0)
cout <<p[i].a << "*x" << 'e' << p[i].n;
}
}
cout << endl;
}
void Polynomial::set()
{
for (int i = 0; i < length; i++)
{
cin >> p[i].a >> p[i].n;
}
}
Polynomial Polynomial::operator+(const Polynomial& A)
{
Polynomial b;
if (b.p)
delete[]b.p;
b.p = new F[length + A.length];
b.length = length + A.length;
int i,j,k=0;
int l = b.length;
for (i = 0; i < length; i++)
{
b.p[k].a = p[i].a;
b.p[k].n = p[i].n;
k++;
}
for (j = 0; j < A.length; j++)
{
b.p[k].a = A.p[j].a;
b.p[k].n = A.p[j].n;
k++;
}
b.simple();
return b;
}
Polynomial Polynomial::operator-(const Polynomial& A)
{
Polynomial b;
if (b.p)
delete[]b.p;
b.p = new F[length + A.length];
b.length = length + A.length;
int i, j, k = 0;
int l = b.length;
for (i = 0; i < length; i++)
{
b.p[k].a = p[i].a;
b.p[k].n = p[i].n;
k++;
}
for (j = 0; j < A.length; j++)
{
b.p[k].a = -A.p[j].a;
b.p[k].n = A.p[j].n;
k++;
}
b.simple();
return b;
}
Polynomial Polynomial::operator*(const Polynomial& A)
{
Polynomial b;
if (b.p)
delete[]b.p;
int k = 0;
b.p = new F[length * A.length];
b.length = length * A.length;
for (int i = 0; i < length; i++)
{
for (int j = 0; j < A.length; j++)
{
b.p[k].a = p[i].a * A.p[j].a;
b.p[k].n = p[i].n + A.p[j].n;
k++;
}
}
b.simple();
return b;
}
Polynomial& Polynomial::operator=(const Polynomial& A)
{
if (p)
delete[]p;
p = new F[A.length];
length = A.length;
for (int i = 0; i < A.length; i++)
{
p[i].a = A.p[i].a;
p[i].n = A.p[i].n;
}
return *this;
}
void Polynomial::simple()
{
int l = length;
for (int i = 0; i < l-1; i++)
{
for (int j = i + 1; j < l; j++)
{
if (p[j].n == p[i].n)
{
p[i].a += p[j].a;
p[j].a = 0;
length--;
}
}
}
Polynomial b;
if (b.p)
delete[]b.p;
b.p = new F[length];
b.length = length;
int k = 0;
for (int i = 0; i < l; i++)
{
if (p[i].a)
{
b.p[k].a = p[i].a;
b.p[k].n = p[i].n;
k++;
}
}
*this = b;
}
int main()
{
Polynomial u1(4), u2(3);
u1.get();
u2.get();
u1.set();
u2.set();
u1.get();
u2.get();
Polynomial u3;
u3 = u1 + u2;
u3.get();
u3 = u1 - u2;
u3.get();
u3 = u1 * u2;
u3.get();
}
会发生如下问题
应该怎么解决