⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makepolynominal.cpp

📁 c++语言 实现多项式的加法、乘法等
💻 CPP
字号:
#include <iostream>
using namespace std;

#include "Polynominal.h"

Polynominal::Polynominal()
{
	theList = new Term(0, -1); //生成带头结点的空循环链表
    theList->link = theList;
}

void Polynominal::InsertTerm(int c, int e)
{
	Term *pTerm = theList->link;
	Term *pPreTerm = theList;
	while (pTerm != theList){
		if (pTerm->exp < e){
			pPreTerm = pTerm;
			pTerm = pTerm->link;
		}
		else {
			if (pTerm->exp == e){
				pTerm->coef += c;
				return;
			}
			else
				break;
		}
	}
	pPreTerm->link=new Term(c,e,pTerm);
}
void Polynominal::AddTerms(istream & in)
{
    int c, e;
    for(;;)
	{ 	 
		cout<<"Input a term(coef,exp):\n" << endl;
		in >> c >> e;
		if (e < 0) 
			break;
		InsertTerm(c,e);
		//q->InsertAfter(c, e);		
		//q = q->InsertAfter(c, e);
     }
}

void Polynominal::Output(ostream& out) const
{
   int first = 1;
   Term *p = theList->link;//(p指向谁?)
   cout << "The polynominal is:\n" << endl;
   for ( ; p != theList; p = p->link){
     if(!first && (p->coef > 0))
		 out << "+";
     first = 0;
     out << *p;// 调用Term类上重载的“<<”操作。
   }
   cout << "\n" << endl;
}


void Polynominal::PolyAdd(Polynominal& r) //为什么只有一个参数
{
    Term* q, *q1 = theList, *q2, *p;
    p = r.theList; q = q1->link; p = p->link;    //p和q指向两个当前进行比较的项
	while (p->exp >= 0){     //如果p多项式未结束,则继续
		while (p->exp < q->exp)
		{
			q1 = q; 
			q = q->link;
		}
		if (p->exp == q->exp)
		{
			q->coef = q->coef + p->coef;
			if (q->coef == 0)
			{
				q2 = q;
				q1->link = q->link;
                q = q->link;
				delete(q2);
                p = p->link;
			}
			else 
			{
				q1 = q; 
				q = q->link; 
				p = p->link;
			}
		}
		else{                      // (p->exp>q->exp)
			q1 = q1->InsertAfter(p->coef, p->exp);  
			p = p->link;
		}   //end else
	}    //end while
}     //end PolyAdd


ostream& operator <<(ostream &out, const Polynominal &x) 
{ 
	x.Output(out);  
	return out;
}


istream& operator >>(istream& in, Polynominal &x)
{  
	x.AddTerms(in);   
	return in;
}


Polynominal operator +( Polynominal& a, Polynominal& b) 
{  
	a.PolyAdd(b);
	return a;
}

void Polynominal::Release()
{
	Term *pHead = theList->link;
	while (pHead != theList){
		Term *tmp = pHead;
		pHead = pHead->link;
		delete tmp;
	}
	delete theList;
}
Polynominal Polynominal::multiply(Polynominal& p,Polynominal& q)
{
	Polynominal s;
	Term *op1, *op2;
	op1 = p.theList;//oprand1	
	int c,e;
	cout<<"Begin______\n";
	for(op1 = op1->link;op1->exp != -1;op1 = op1->link)
	{
		op2 = q.theList;//oprand2		
		for(op2 = op2->link; op2->exp != -1; op2 = op2->link)
		{
			c = op1->coef * op2->coef;
			e = op1->exp + op2->exp;
			s.InsertTerm(c,e);
		}
	}
	cout<<s;
	cout<<"END______\n";
	return s;
}


Polynominal operator *(Polynominal& a, Polynominal& b)
{
	return Polynominal::multiply(a,b);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -