一元多项式的乘法与加法运算的C语言实现

在这里插入图片描述
用结构体不用说了,现在只写了数组,以后把链表补上。

#include<stdio.h>
typedef struct shu
{
	int xi;
	int zhi;
}SHU;
SHU zu1[100],zu2[100],chen[100],jia[100];
void shuru1(int n) //输入上面一行的多项式
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",&zu1[i].xi);
		scanf("%d",&zu1[i].zhi);
	}
}

void shuru2(int n)  //输入下面一行的多项式
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%d",&zu2[i].xi);
		scanf("%d",&zu2[i].zhi);
	}
}

int chenji(int n,int m) //乘积
{
	int i,j,k,s=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			chen[s].xi = zu1[i].xi * zu2[j].xi;
			chen[s].zhi = zu1[i].zhi + zu2[j].zhi;
			s++;
		}
	}
	for(i=0;i<s-1;i++)
	{
		for(j=i+1;j<s;j++)
		{
			if(chen[i].zhi == chen[j].zhi)
			{
				chen[i].xi += chen[j].xi;
				for(k=j;k<s-1;k++)
				{
					chen[k] = chen[k+1];  //合并同类项
				}
				s--; 
			}
		}
	}
	return s;
}
int jiafa(int n,int m)
{
	int i,j,k,f;
	for(i=0;i<n;i++)
	{
		jia[i] = zu1[i];
	}
	for(i=0;i<m;i++)
	{
		jia[i+n] = zu2[i];
	}
	f = n+m;
	for(i=0;i<f-1;i++)
	{
		for(j=i+1;j<f;j++)
		{
			if(jia[i].zhi == jia[j].zhi)
			{
				jia[i].xi += jia[j].xi;
				for(k=j;k<f-1;k++)
				{
					jia[k] = jia[k+1]; //合并同类项
				}
				f--;
			}
		}
	}
	return f;
}
void panduan(int s,int f)
{
	int i,j;
	for(i=0;i<s;i++)
	{
		if(chen[i].xi == 0)
		chen[i].zhi = 0;
	}
	for(i=0;i<f;i++)
	{
		if(jia[i].xi == 0)
		jia[i].zhi = 0;
	}
}
void paixu(int s,int f)//排序
{
	SHU temp;
	int i,j;
	for(i=0;i<s-1;i++)
	{
		for(j=0;j<s-1-i;j++)
		{
			if(chen[j].zhi < chen[j+1].zhi)
			{
				temp = chen[j];
				chen[j] = chen[j+1];
				chen[j+1] = temp;
			}
		}
	}
	for(i=0;i<f-1;i++)
	{
		for(j=0;j<f-1-i;j++)
		{
			if(jia[j].zhi < jia[j+1].zhi)
			{
				temp = jia[j];
				jia[j] = jia[j+1];
				jia[j+1] = temp;
			}
		}
	}
}
void prin(int s,int f)
{
	int i,j,jec1=0,jec2=0;
	for(i=0;i<s;i++)
	{
		if(chen[i].xi != 0)
		jec1 = 1;
	}
	for(i=0;i<f;i++)
	{
		if(jia[i].xi != 0)
		jec2 = 1;
	}
	if(jec1 == 0)
	printf("0 0");
	else
	{
		if(chen[0].xi != 0)
	    printf("%d %d",chen[0].xi,chen[0].zhi);
	    for(i=1;i<s;i++)
	    {
		    if(chen[i].xi != 0)
		    printf(" %d %d",chen[i].xi,chen[i].zhi);
	    }
	}
	printf("\n");
    if(jec2 == 0)
    printf("0 0");
    else
   {
	    if(jia[0].xi != 0)
	    printf("%d %d",jia[0].xi,jia[0].zhi);
	    for(i=1;i<f;i++)
	    {
		    if(jia[i].xi != 0)
		    printf(" %d %d",jia[i].xi,jia[i].zhi);
	    }	
	}
}
int main()
{
	int n,m,i,s,f;
	scanf("%d",&n);
	shuru1(n);
	getchar();
	scanf("%d",&m);
	shuru2(m);
	s = chenji(n,m);
	f = jiafa(n,m);
	panduan(s,f);
	paixu(s,f);
	prin(s,f);
	return 0; 
} 

猜你喜欢

转载自blog.csdn.net/qq_46293423/article/details/104756519