PTA03一元多项式的乘积与和

PTA03线性结构2 一元多项式的乘法与加法运算 (20分通过)

设计函数分别求两个一元多项式的乘积与和。
输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0

参考

    #include<stdio.h>
                #include<stdlib.h>
                
                typedef int elemtype;
                struct poly
                {
                	elemtype coef;//系数
                	int expo;//指数
                };
                struct LNode {
                	poly Array[1000];//
                	int Last;/
                };
                typedef LNode*List;
                List Plus(List A, List B,List C);
                List Mult(List A, List B, List C);
                void Delete(List L, int i);
                void Print(List L);
                void Insert(int X,int M,List C)
                {
                	C->Array[C->Last + 1].coef = X;
                	C->Array[C->Last + 1].expo = M;
                	C->Last++;
                }
                void Delete(List L, int i)
                {
                	int j;
                
                	if (i<0 || i>L->Last)
                	{
                		printf("空表或者删除位序不对\n");
                	}
                	for (j = i; j <= L->Last; j++)
                	{
                		L->Array[j].coef = L->Array[j+1].coef;
                		L->Array[j].expo = L->Array[j+1].expo;
                		
                	}
                	L->Last--;
                }
                int main()
                {
                	int n1;
                	int n2;
                	List A, B, C, D;
                	A = (List)malloc(sizeof(LNode));
                	A->Last = -1;
                	D = (List)malloc(sizeof(LNode));
                	D->Last = -1;
                	B = (List)malloc(sizeof(LNode));
                	B->Last = -1;
                	C = (List)malloc(sizeof(LNode));
                	C->Last = -1;
                
                	int i;
                
                	//printf("输入多项式1的非零项的个数:\n");
                	scanf_s("%d", &n1);
                	//printf("按照指数从大到小输入对应的系数和指数:\n");
                	for (i = 0; i <= n1 - 1; i++)
                	{
                		scanf_s("%d %d",&A->Array[i].coef, &A->Array[i].expo);
                	//	scanf_s("%d",&A->Array[i].expo);
                		
                		A->Last++;
                	}
                
                	//printf("输入多项式2的非零项的个数:\n");
                	scanf_s("%d", &n2);
                	//printf("按照指数从大到小输入对应的系数和指数:\n");
                	for (int j= 0; j <= n2- 1; j++)
                	{
                		scanf_s("%d %d",&B->Array[j].coef, &B->Array[j].expo);
                		//scanf_s("%d",&B->Array[j].expo);
                		
                		B->Last++;
                	}	
                	Print(Mult(A, B, D));//乘法
                
                	Print(Plus(A, B, C));//加法
                
                	return 0;
                	//plus(a,b,c,n1,n2);
                }
                void Print(List L)
                {
                	int i = 0;
                	if (i <= L->Last)
                	{
                		printf("%d %d", L->Array[i].coef, L->Array[i].expo);
                	}
                	for (i = 1; i <= L->Last; i++)
                	{
                		printf(" %d %d", L->Array[i].coef, L->Array[i].expo);
                	}
                	printf("\n");
                }
                List Plus(List A, List B, List C)
                {
                	int i = 0;
                	int j = 0;
                	int k1, k2;
                
                	while (i <= A->Last&&j <= B->Last)
                	{
                		if (A->Array[i].expo == B->Array[j].expo)
                		{
                			k1 = A->Array[i].coef + B->Array[j].coef;
                			k2 = B->Array[j].expo;
                			if (k1 != 0)Insert(k1, k2, C);
                			i++;
                			j++;
                		}
                		else if (A->Array[i].expo > B->Array[j].expo)
                		{
                			k1 = A->Array[i].coef;
                			k2 = A->Array[i].expo;
                			Insert(k1, k2, C);
                			i++;
                		}
                		else if (A->Array[i].expo < B->Array[j].expo)
                		{
                			k1 = B->Array[j].coef;
                			k2 = B->Array[j].expo;
                			Insert(k1, k2, C);
                			j++;
                		}
                	}
                	if (i <= A->Last)
                	{
                		k1 = A->Array[i].coef;
                		k2 = A->Array[i].expo;
                		Insert(k1, k2, C);
                		i++;
                
                	}
                	if(j <= B->Last)
                	{
                		k1 = B->Array[j].coef;
                		k2 = B->Array[j].expo;
                		Insert(k1, k2, C);
                		j++;
                	}
                	return C;
                }
                
                List Mult(List A, List B, List D)
                {
                	int i, j;
                	int k1, k2;
                	int m, n;
                	for (i = 0; i <= A->Last; i++)
                	{
                		for (j = 0; j <= B->Last; j++)
                		{
                
                			k1 = (A->Array[i].coef)*(B->Array[j].coef);//存系数
                			k2 = A->Array[i].expo + B->Array[j].expo;//存指数
                			Insert(k1, k2, D);
                		}
                	}
                	int max1, temp1, max2, temp2;
                	for (m = 0; m <= D->Last; m++)
                	{
                		for (n = m + 1; n <= D->Last; n++)
                		{
                			if (D->Array[n].expo > D->Array[m].expo)
                			{
                				temp1 = D->Array[m].expo;
                				temp2 = D->Array[m].coef;
                				D->Array[m].expo = D->Array[n].expo;
                				D->Array[m].coef = D->Array[n].coef;
                				D->Array[n].expo = temp1;
                				D->Array[n].coef = temp2;
                			}
                
                			else if (D->Array[m].expo == D->Array[n].expo)
                			{
                				D->Array[m].coef += D->Array[n].coef;
                				if (D->Array[m].coef == 0)
                				{
                					Delete(D, m);
                				}
                				Delete(D, n-1);
                			}
                
                		}
                	}
                	return D;
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值