头文件:多项式.h
#include"iostream"
#include"string"
using namespace std;
class Polynomial
{
public:
Polynomial();
void Create();
void Insert(double Xishu,double Zhishu);
void show();
void ADD(Polynomial &p, Polynomial &p2);
bool Delete(double xishu,double zhishu);
void FindOut();
void Take(Polynomial &p, Polynomial &p2);
void Minus(Polynomial &p, Polynomial &p2);
private:
class Poly
{
public:
Poly() { Xishu = 0; Zhishu = 0; }
void shows()
{
if (Zhishu == 0)
cout << Xishu;
else if (Xishu == 0)
{
}
else if (Xishu == 1)
{
cout <<"X" << '(' << Zhishu << ')';
}else
cout << Xishu << "X" << '(' << Zhishu << ')' ;
}
double Xishu;
double Zhishu;
Poly*Next;
};
Poly*Head;
Poly*Tail;
};
多项式.cpp
#include"多项式.h"
Polynomial::Polynomial()
{
Head = new Poly;
Tail = Head;
}
void Polynomial::ADD(Polynomial &p, Polynomial &p2)
{
Poly *L = p2.Head->Next;
while (L != NULL)
{
p.Insert(L->Xishu, L->Zhishu);
L = L->Next;
}
p.FindOut();
}
void Polynomial::Take(Polynomial &p, Polynomial &p2)
{
Polynomial New;
for (Poly*h = p.Head->Next; h != NULL; h = h->Next)
for (Poly*k = p2.Head->Next; k != NULL; k = k->Next)
New.Insert(h->Xishu*k->Xishu, h->Zhishu+k->Zhishu);
New.FindOut();
New.show();
}
void Polynomial::Minus(Polynomial &p, Polynomial &p2)
{
Poly*k = p2.Head->Next;
for (; k != NULL; k = k->Next)
{
k->Xishu -= 2 * k->Xishu;
}
Poly *L = p2.Head->Next;
while (L != NULL)
{
p.Insert(L->Xishu, L->Zhishu);
L = L->Next;
}
p.FindOut();
}
void Polynomial::FindOut()
{
Poly *p,*q;
p = Head->Next;
for (p = Head->Next; p != NULL; p = p->Next)
for (q = p->Next; q != NULL;q=q->Next)
if (p->Zhishu == q->Zhishu)
{
p->Xishu += q->Xishu;
q->Xishu = 0;
}
}
void Polynomial::show()
{
Poly*p;
p = Head->Next;
while (p != NULL)
{
p->shows();
p = p->Next;
if (p!=NULL&&p->Xishu > 0)
cout << '+';
}
}
void Polynomial::Insert(double xishu,double zhishu)
{
Poly*NEW;
NEW = new Poly;
NEW->Xishu = xishu;
NEW->Zhishu = zhishu;
Tail->Next= NEW ;
Tail = Tail->Next;
Tail->Next = NULL;
}
bool Polynomial::Delete(double xishu, double zhishu)
{
Poly*p = Head;
Poly*q;
for (; p!= NULL;p=p->Next)
if (p->Next->Xishu == xishu&&p->Next->Zhishu == zhishu)
{
q = p->Next;
p->Next = q->Next;
delete q;
return true;
}
return false;
}
void Polynomial::Create()
{
/*cout << "输入项数:" << endl;
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
double B, D;
cout << "第" << i + 1 << "项系数和指数" << endl;
cin >> B >> D;
Insert(B, D);
}*/
string X;
char*p;
// cout<< "请输入一个多项式:" << endl;
cin >> X;
char*T;
T = &X[0];
while (*T != NULL)
{
while (*T != 'x'&&*T != 'X'&&*T != '('&&*T != ')'&&*T != '-'&&*T != '+'&&*T!='0'&&*T!='1'&&*T!='2'&&*T != '3'&&*T != '4'&&*T != '5'&&*T != '6'&&*T != '7'&&*T != '8'&&*T != '9')
{
cout << "请不要乱输入!再输入一次吧:" << endl;
cin >> X;
T = &X[0];
}
T++;
}
string Str[10];
p = &X[0];
int i = 0;
while (*p != NULL)
{
while ((*p != '+'&& *p != '-'&&*p != NULL) || p == &X[0])
{
char*f;
f = p;
f--;
if (*f == '-')
{
Str[i] += '-';
}
Str[i] += *p;
p++;
}i++;
if (*p == NULL)
break;
else
{
p++;
}
}
for (int n = 0; n < i; n++)
{
//cout << Str[n] << endl;
double B;
double D;
char*q[10];
q[n] = &Str[n][0];
string Str1[10];
string Str2[10];
while (*q[n] != NULL)
{
if (*q[n] != 'X'&&*q[n] != 'x'&&*q[n] != '(')
{
while (*q[n] != 'X'&&*q[n] != 'x'&&*q[n] != '('&&*q[n]!=NULL)
{
Str1[n] += *q[n];
q[n]++;
}
if (Str1[n] == "-")
Str1[n] += '1';
B = atof(Str1[n].c_str());
if (*q[n] == NULL) { D = 0; }
else if (*++q[n] == '(')
{
q[n]++;
while (*q[n] != ')')
{
Str2[n] += *q[n];
q[n]++;
}
D = atof(Str2[n].c_str());
}
else { D = 0; }
Insert(B, D); break;
}
else if (*q[n] == 'X' || *q[n] == 'x')
{
B = 1;
q[n]++;
if (*q[n] == '(')
{
q[n]++;
while (*q[n] != ')')
{
Str2[n] += *q[n];
q[n]++;
}
D = atof(Str2[n].c_str());
}
Insert(B, D); break;
}
else
{
B = D = 0; break;
}
/*if (48 <= *q[n] <= 57|| q[n] == &Str[n][0])
{
while (*q[n] != 'x'&&*q[n]!=NULL)
{
Str1[n] += *q[n];
q[n]++;
B = atof(Str1[n].c_str());
}
}
else if (*q[n] == 'x' || *q[n] == 'X')
{
B = 1;
}
else
{
B = 0;
}
if (*q[n] == '(')
{
q[n]++;
while (*q[n] != ')')
{
Str2[n] += *q[n];
q[n]++;
}
D = atof(Str2[n].c_str());
}
else
{
D = 0;
}
if (*q[n] == NULL)break;
q[n]++;
//cout << "insert" << endl;
cout << B << " " << D << endl;
}
Insert(B, D);*/
}
}
}
mian.cpp
/*乘法:
请输入第1个一元多项式:7+x(2)+3x(5)-100x(100)
请输入运算符:*
请输入第2个一元多项式:x(2)-3x(5)
运算结果为:7x(2)+x(4)-21x(5)-9x(10)-100x(102)+300x(105)
加法:
请输入第1个一元多项式:7+x(2)+3x(5)-100x(100)
请输入运算符:+
请输入第2个一元多项式:x(2)-3x(5)
运算结果为:7+2x(2)-100x(100)
减法:
请输入第1个一元多项式:7+x(2)+3x(5)-100x(100)
请输入运算符:-
请输入第2个一元多项式:x(2)-3x(5)
运算结果为:7+6x(5)-100x(100)
*/
#include"多项式.h"
int main()
{
Polynomial P;
Polynomial P2;
cout << "乘法:" << endl;
cout << "请输入第一个一元多项式:" << endl;
P.Create(); cout << endl;
cout << "请输入运算符(*,+,-):" << endl;
string t;
cin >> t;
while(t != "*"&&t!= "+" &&t!= "-")
{
cout << "您输入的运算符有误,请重新输入:" << endl;
cin >> t;
}
char *x;
x = &t[0];
cout << "请输入第二个一元多项式:" << endl;
switch (*x)
{
case '*':P2.Create(); cout << "运算结果是:"; P.Take(P, P2); cout << endl; break;
case'+':P2.Create(); cout << "运算结果是:"; P.ADD(P, P2); P.show(); cout << endl; break;
case'-':P2.Create(); cout << "运算结果是:"; P.Minus(P, P2); P.show(); cout << endl; break;
default:break;
}
cout << "加法:" << endl;
Polynomial P3;
Polynomial P4;
cout << "请输入第一个一元多项式:" << endl;
P3.Create(); cout << endl;
cout << "请输入运算符:" << endl;
cin >> t;
while (t != "*"&&t != "+" &&t != "-")
{
cout << "您输入的运算符有误,请重新输入:" << endl;
cin >> t;
}
x = &t[0];
cout << "请输入第二个一元多项式:" << endl;
switch (*x)
{
case '*':P4.Create(); cout << "运算结果是:"; P.Take(P3, P4); cout << endl; break;
case'+':P4.Create(); cout << "运算结果是:"; P.ADD(P3, P4); P3.show(); cout << endl; break;
case'-':P4.Create(); cout << "运算结果是:"; P.Minus(P3, P4); P3.show(); cout << endl; break;
default:break;
}
cout << "减法:" << endl;
Polynomial P5;
Polynomial P6;
cout << "请输入第一个一元多项式:" << endl;
P5.Create(); cout << endl;
cout << "请输入运算符:" << endl;
cin >> t;
while (t != "*"&&t != "+" &&t != "-")
{
cout << "您输入的运算符有误,请重新输入:" << endl;
cin >> t;
}
x = &t[0];
cout << "请输入第二个一元多项式:" << endl;
switch (*x)
{
case '*':P6.Create(); cout << "运算结果是:"; P5.Take(P5, P6); cout << endl; break;
case'+':P6.Create(); cout << "运算结果是:"; P5.ADD(P5, P6); P5.show(); cout << endl; break;
case'-':P6.Create(); cout << "运算结果是:"; P5.Minus(P5, P6); P5.show(); cout << endl; break;
default:break;
}
}
一元多项式
最新推荐文章于 2024-01-22 17:49:30 发布