一元稀疏多项式

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

typedef struct PNode
{
	float coef;
	int expn;
	struct PNode *next;
}PNode,*Polynomial;


void CreatePolyn(Polynomial &p,int n)
{
	p = new PNode;
	PNode *s , *pre , *q;
	p->next = NULL;
	for(int i = 1;i<=n;i++)
	{ 
		s = new PNode; 
		cin>>s->coef>>s->expn;
		
		pre = p;
		q = p->next;
		while(q && q->expn<s->expn)
		{  
			pre = q;
			q = q->next;
		}
		s->next = q;
		pre->next = s;
	}
}

void PrintPolyn(Polynomial &L)
{
	PNode *p;
	p = L->next;
	
	while(p)
	{
		if(p->next)//判断后续是否存在数据,以便判断是否需要输出正负号
		{
		/*
		printf("%+f",a); 能够将a的正负号输出出来
		*/
			if(p->expn==0)//用于判断是否需要输出x
			{
				printf("%.4f", p->coef);
				continue;
			}
			printf("%.4fX^%d", p->coef,p->expn);
			if(p->next->coef>0) cout<<"+";
		}
		else  printf("%.4fX^%d", p->coef,p->expn);
		
		p = p->next;
	}

}

void AddPolyn(Polynomial &Pa, Polynomial &Pb)
{
	PNode *p1 , *p2 , *p3 , *r;
	p1 = Pa->next;
	p2 = Pb->next;
	p3 = Pa;
	int sum = 0;
	while(p1&&p2)
	{
		if(p1->expn == p2->expn)
		{
			sum = p1->coef+p2->coef;
			if(sum != 0)
			{
				p1->coef = sum;
				p3->next = p1;
				p3 = p1;
				p1 = p1->next;
				r = p2;
				p2 = p2->next;
				delete r;
			}else
			{
				r = p1;
				p1 = p1->next;
				delete r;
				r = p2;
				p2 = p2->next;
				delete r;
			}
		}else if(p1->expn < p2->expn)
		{
			p3->next = p1;
			p3 = p1;
			p1 = p1->next;
		}else
		{
			p3->next = p2;
			p3 = p2;
			p2 = p2->next;
		}
	}
	p3->next = p1?p1:p2;
	delete Pb;
	PrintPolyn(Pa);
} 

int main()
{
	PNode *p1,*p2;
	int n1,n2; 
	printf("请输入p1的项数\n"); 
	scanf("%d",&n1); 
	CreatePolyn(p1,n1); 
	
	printf("请输入p2的项数\n"); 
	scanf("%d",&n2); 
	CreatePolyn(p2,n2); 
	
	AddPolyn(p1,p2);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值