#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;
}
我用c++写的一个多项式的处理器的核心部分和输出部分。实现多项式的加法,减法,乘法,除法,及其求余。
最新推荐文章于 2022-12-22 18:01:48 发布