多项式的表示

1.多项式的系数存放在数组中

# include <iostream>
# include <cstdlib>
# define max(x,y) ((x)>(y)?(x):(y))
using namespace std;
const int N=100;
struct poly
{
int arr[N];
int mexp;
};

void add(poly &a,poly &b,poly &c)
{
	memset(c.arr,0,sizeof(c.arr));
	c.mexp=max(a.mexp,b.mexp);
	int i=0;
	for(;i<=c.mexp;i++)
		c.arr[i]=a.arr[i]+b.arr[i];
	cout<<"add result:"<<endl;
	cout<<c.mexp<<endl;
	for(i=0;i<=c.mexp;i++)
		cout<<c.arr[i]<<" ";
	cout<<endl;
}

void mul(poly &a,poly &b,poly &ans)
{
	memset(ans.arr,0,sizeof(ans.arr));
	ans.mexp=a.mexp+b.mexp;
	int i,j;
	for(i=0;i<=a.mexp;i++)
		for(j=0;j<=b.mexp;j++)
			ans.arr[i+j]+=a.arr[i]*b.arr[j];
	cout<<"multiply result:"<<endl;
	cout<<ans.mexp<<endl;
	for(i=0;i<=ans.mexp;i++)
		cout<<ans.arr[i]<<" ";
	cout<<endl;
}

int main()
{

    poly a,b,c;
	memset(a.arr,0,sizeof(a.arr));
	memset(b.arr,0,sizeof(b.arr));
	cout<<"多项式最高幂次"<<endl;
	cin>>a.mexp;
	int i=0;
	cout<<"多项式的各项系数(幂次数递增)"<<endl;
	for(;i<=a.mexp;i++)
		scanf("%d",&a.arr[i]);
	cout<<"多项式最高幂次"<<endl;
	cin>>b.mexp;
	cout<<"多项式的各项系数(幂次数递增)"<<endl;
	for(i=0;i<=b.mexp;i++)
		scanf("%d",&b.arr[i]);
	add(a,b,c);
	
	mul(a,b,c);
	
system("pause");
return 0;
}

2.多项式的系数存放在链表结点中

# include <iostream>
# include <cstdlib>
using namespace std;
struct node
{
int key;
int exp;
node *next;
};

node *create()
{
node *head=new node;
head->next=NULL;
node *s=head;
int x,y;
cout<<"请输入系数和次数(次数递增),以0 0结束"<<endl;
while(cin>>x>>y&&(x!=0||y!=0))
{
node *tmp=new node;
tmp->key=x;
tmp->exp=y;
tmp->next=NULL;
s->next=tmp;
s=tmp;
}
return head;
}

node *add(node *h1,node *h2)
{  
	node *p=h1->next;
	node *q=h2->next;
node *s=h1;
node *cur=h1;
while(p&&q)
{
	if(p->exp==q->exp)
	{
		p->key=p->key+q->key;
		s->next=p;
		s=p;
		p=p->next;
		q=q->next;
	}
	else if(p->exp<q->exp)
	{
		s->next=p;
		s=p;
		p=p->next;
	}
	else 
	{
		s->next=q;
		s=q;
		q=q->next;
	}
	if(s->key!=0)
	{
		cur->next=s;
		cur=s;
	}
	
}
if(p==NULL)
	p=q;
while(p)
{
	cur->next=p;
	p=p->next;
}
return h1;
}
void display(node *h)
{
	node *p=h->next;
	while(p)
	{
		cout<<p->key<<"*x^"<<p->exp<<" ";
		p=p->next;
	}
	cout<<endl;
}

int main()
{
	node *h1=create();
	node *h2=create();
	node *h=add(h1,h2);
	cout<<"相加结果:"<<endl;
	display(h);
system("pause");
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值