一元多项式

头文件:多项式.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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值