我用c++写的一个多项式的处理器的核心部分和输出部分。实现多项式的加法,减法,乘法,除法,及其求余。

 
#include<iostream>
#include<vector>
using namespace std;
struct ploy{
	double xishu;
	int zhishu;
};
void print(vector<ploy>& v){
	vector<ploy>::iterator it=v.begin();
	for(;it!=v.end();it++){
		if(it!=v.end()-1){
			if((*it).xishu==1){}
			else{
				if((*it).xishu<0)
				{
					cout<<"("<<(*it).xishu<<")*";
				}
				else{
					cout<<(*it).xishu<<"*";
				}
			}
			if((*it).zhishu!=0){
			    cout<<"x^"<<(*it).zhishu<<"+";
			}
			else{
				cout<<"+";
			}
		}
		else{
			if((*it).xishu==1){cout<<1;}
			else{
				if((*it).xishu<0)
				{
					cout<<"("<<(*it).xishu<<")";
				}
				else{
					cout<<(*it).xishu;
				}
			}
			if((*it).zhishu!=0){
				cout<<"*x^"<<(*it).zhishu;
			}
			else{
			}
		}
	}
}
vector<ploy> operator+(vector<ploy>& op1,vector<ploy>& op2){
	if(op1.empty())return op2;if(op2.empty())return op1;
	vector<ploy> answer;
	vector<ploy>::iterator it1=op1.begin();
	vector<ploy>::iterator it2=op2.begin();
	while(it1!=op1.end() && it2!=op2.end()){
		if(((*it1).zhishu)>((*it2).zhishu)){
			answer.push_back(*it1);
			it1++;
			continue;
		}
		else{
			if(((*it1).zhishu<(*it2).zhishu)){
				answer.push_back(*it1);
				it2++;
				continue;
			}
			else{
				if((*it1).xishu!=-(*it2).xishu){					
					ploy temp;
					temp.xishu=(*it1).xishu+(*it2).xishu;temp.zhishu=(*it1).zhishu;
					answer.push_back(temp);
				}
				it1++;it2++;
				continue;
			}
		}
	}
	if(it1!=op1.end()){
		while(it1!=op1.end()){
			answer.push_back(*it1);
			it1++;
		}
	}
	else{
		if(it2!=op2.end()){
			while(it2!=op2.end()){
				answer.push_back(*it2);
				it2++;
			}
		}
	}
	return answer;
}
vector<ploy> operator-(vector<ploy>& op1,vector<ploy>& op2){
	vector<ploy> answer;
	vector<ploy>::iterator it1=op1.begin();
	vector<ploy>::iterator it2=op2.begin();
	if(op2.empty()){return op1;}
	if(op1.empty()){
		for(;it2!=op2.end();it2++)
		{
			ploy temp;
			temp.xishu=-(*it2).xishu;
			temp.zhishu=(*it2).zhishu;
			answer.push_back(temp);
		}
		return answer;
	}
	it2=op2.begin();
	while(it1!=op1.end() && it2!=op2.end()){
		if(((*it1).zhishu)>((*it2).zhishu)){
			answer.push_back(*it1);it1++;
			continue;
		}
		else{
			if(((*it1).zhishu<(*it2).zhishu)){
				ploy temp;temp.zhishu=(*it2).zhishu;temp.xishu=-(*it2).xishu;
				answer.push_back(temp);it2++;
				continue;
			}
			else{
				ploy temp;
				if((temp.xishu=(*it1).xishu-(*it2).xishu)!=0){
					temp.zhishu=(*it1).zhishu;
					answer.push_back(temp);
				}
				it1++;it2++;
				continue;
			}
		}
	}
	if(it1!=op1.end()){
		while(it1!=op1.end()){
			answer.push_back(*it1);
			it1++;
		}
	}
	else{
		while(it2!=op2.end()){
			answer.push_back(*it2);
			it2++;
		}
	}
	return answer;
}
vector<ploy> operator*(vector<ploy>& op1,ploy& op2){
	vector<ploy> answer;
	vector<ploy>::iterator it1=op1.begin();
	for(;it1!=op1.end();it1++){
		ploy temp;
		temp.xishu=(*it1).xishu*op2.xishu;temp.zhishu=(*it1).zhishu+op2.zhishu;
		answer.push_back(temp);
	}
	return answer;
}
vector<ploy> operator*(vector<ploy>& op1,vector<ploy>& op2){
	vector<ploy> answer;
	vector<ploy>::iterator it1=op1.begin();
	vector<ploy>::iterator it2=op2.begin();
	for(;it2!=op2.end();it2++){
		answer=answer+op1*(*it2);
	}
	return answer;
}
vector<ploy> operator/(vector<ploy>& op1,vector<ploy>& op2){
	vector<ploy> answer;
	if(op1.empty())return answer;if(op2.empty())return op1;
	vector<ploy> v1=op1;
	vector<ploy>::iterator it1=v1.begin();
	vector<ploy>::iterator it2=op2.begin();
	while(!v1.empty()){
		ploy temp;temp.zhishu=v1[0].zhishu-op2[0].zhishu;temp.xishu=v1[0].xishu/op2[0].xishu;
		answer.push_back(temp);
		v1=v1-op2*temp;
		if(v1[0].zhishu<op2[0].zhishu)break;
	}
	return answer;
}
vector<ploy> operator%(vector<ploy>& op1,vector<ploy>& op2){
	vector<ploy> answer;
	if(op1.empty())return answer;if(op2.empty())return op1;
	answer=op1-op2*(op1/op2);
	return answer;
}
void main(){
	ploy a;a.xishu=1;a.zhishu=2;
	ploy b;b.xishu=2;b.zhishu=1;
	ploy c;c.xishu=2;c.zhishu=0;
	vector<ploy> v1;v1.push_back(a);v1.push_back(b);v1.push_back(c);print(v1);cout<<endl;

	ploy d;d.xishu=-2;d.zhishu=1;
	ploy e;e.xishu=1;e.zhishu=0;
	vector<ploy> v2;v2.push_back(d);v2.push_back(e);
	print(v2);cout<<endl;

	vector<ploy> answer=v1+v2;
	print(answer);cout<<endl;
	vector<ploy> answer2=v1-v2;
	print(answer2);cout<<endl;
	vector<ploy> answer3=v1*v2;
	print(answer3);cout<<endl;
	vector<ploy> answer4=v1/v2;
	print(answer4);cout<<endl;
	vector<ploy> answer5=v1%v2;
	print(answer5);cout<<endl;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值