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

📄 polynominal.cpp

📁 多项式相乘,利用单链表及面向对象思想做的两个多项式相乘
💻 CPP
字号:
// term.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;

/*以下是定义多项式结点类*/
class Term{
public:
        Term(int c,int e);
	Term(int c,int e,Term* nxt);
	/*
	在this指针指示的项后插入新项当调用一个成员函数时,
	系统保证this指针始终指向产生这个调用的对象。
	*/
	Term* InsertAfter(int c,int e);

   
//全部定义为public
//private:
	int coef;
	int exp;
	Term *link;
};    

Term::Term(int c,int e):coef(c),exp(e){
	link = NULL;
}

Term::Term(int c, int e, Term *nxt):coef(c),exp(e){
	link = nxt;
}

Term* Term::InsertAfter(int c, int e){        
	this->link=new Term(c,e,this->link);   //link = new Term(c,e,link);
	
	return link;
}

ostream &operator <<(ostream & out, const Term& val)   // 重载输出运算符
{
	if(val.coef==0) 
		return out;    
	out<<val.coef;
	switch(val.exp){
		case 0:break;
		case 1:out<<"X"; break;
		default:out<<"X^"<<val.exp; break;
	}
	return out;
}


/*以下是多项式类*/
class Polynominal
{
public:
	Polynominal();
	void AddTerms(istream& in);
	void Output(ostream& out)const;
	
        void PolyMultiply(Polynominal& r);
        Term* theList, *theList2, *theList3;   //指向循环链表的头结点
};
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.PolyMultiply(b);
	return a;
}
Polynominal::Polynominal()
{
	theList=new Term(0,-1); 
	theList->link=theList;   //生成带头结点的空循环链表

	theList2=new Term(0,-2); 
	theList2->link=theList2; 

        theList3=new Term(0,-3); 
	theList3->link=theList3; 
}

void Polynominal:: AddTerms(istream & in)
{
	Term* q=theList;
	int c,e;
	for(;;)
	{
		cout<<"Input a term(coef,exp):\n"<<endl;
		in>>c>>e;
		if (e<0) break;
		q=q->InsertAfter(c,e);
	}
}

void Polynominal::Output(ostream& out)const
{
	int first=1;
    Term *p=theList->link;
    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::PolyMultiply(Polynominal& r)
{
	Term *q,*p,*z;            
    p=r.theList->link; q=theList->link; z=theList2;  //p和q指向两个当前的项,z指向一个新的空表,用来存放结果 
	
	while(p->exp>=0){          //如果p多项式未结束,则继续
		while(q->exp>=0){
			z=z->InsertAfter(q->coef*p->coef,q->exp+p->exp);      //把q与p相乘的结果存放在z中
			q=q->link;
			z=z->link;
		}
		
		q=theList->link;        //将q重新指向第一个元素
		p=p->link;       //p指向下个项
	}

	theList=theList2;
}

int main()
{ 
    Polynominal p,q; //创建两个多项式对象p、q
    cout << "输入0 -1时结束"<<endl;
    cin>>p; cout<<p; //输入和显示多项式p
    cin>>q; cout<<q; //输入和显示多项式q
    q=q*p; cout<<q;  //多项式p和q相乘,显示q
    system("pause");
}

⌨️ 快捷键说明

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