一元多项式的乘法与加法运算 PTA02-线性结构1
来源:互联网 发布:在线c语言编译 编辑:程序博客网 时间:2024/05/29 07:45
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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 struct PolyNode *Polynomial;struct PolyNode{ int coef; int expon; Polynomial link;//the same as 'struct PolyNode *link'};void Attach(int coef,int expon,Polynomial *PtrRear);//attach the rear valuePolynomial ReadPoly();//read the polynomialvoid PrintPoly(Polynomial P);Polynomial Add(Polynomial P1,Polynomial P2);Polynomial Mult(Polynomial P1,Polynomial P2);int compare(int e1,int e2);int main(){ Polynomial P1,P2,PP,PS; P1=ReadPoly(); P2=ReadPoly(); PP=Mult(P1,P2); PrintPoly(PP); PS=Add(P1,P2); PrintPoly(PS); return 0;}void Attach(int coef,int expon,Polynomial *PtrRear){ Polynomial P; P=(Polynomial)malloc(sizeof(struct PolyNode)); P->coef=coef; P->expon=expon; P->link=NULL; (*PtrRear)->link=P; *PtrRear=P;}Polynomial ReadPoly(){ Polynomial P,Rear,Temp; P=(Polynomial)malloc(sizeof(struct PolyNode)); P->link=NULL; Rear=P; int N;//polynomial number scanf("%d",&N); int c,e;//cofficient and ecponent while(N--){ scanf("%d %d",&c,&e); Attach(c,e,&Rear); } Temp=P; P=P->link; free(Temp); return P;}void PrintPoly(Polynomial P){ int flag=0; if(!P){ printf("0 0\n"); return; } while(P){ if(!flag) flag=1; else printf(" "); printf("%d %d", P->coef,P->expon); P=P->link; } printf("\n");}int compare(int e1,int e2){ if(e1>e2) return 1; else if(e1<e2) return -1; else return 0;}Polynomial Add(Polynomial P1,Polynomial P2){ Polynomial PS,rear,temp; int sum; PS=(Polynomial)malloc(sizeof(struct PolyNode)); PS->link=NULL; rear=PS; while(P1&&P2){ switch(compare(P1->expon,P2->expon)){ case 1: Attach(P1->coef,P1->expon,&rear); P1=P1->link; break; case -1: Attach(P2->coef,P2->expon,&rear); P2=P2->link; break; case 0: sum=P1->coef+P2->coef; if(sum) Attach(sum,P1->expon,&rear);//coef=0 then do nothing P1=P1->link; P2=P2->link; break; } } while(P1){ Attach(P1->coef,P1->expon,&rear); P1=P1->link; } while(P2){ Attach(P2->coef,P2->expon,&rear); P2=P2->link; } //rear->link=NULL; temp=PS; PS=PS->link; free(temp); return PS;}Polynomial Mult(Polynomial P1,Polynomial P2){ Polynomial PP,rear,tp1,tp2,tpfree,tpadd; int tpe,tpc; if(!P1||!P2) return NULL; tp1=P1;tp2=P2; PP=(Polynomial)malloc(sizeof(struct PolyNode)); PP->link=NULL; rear=PP; while(tp2){ Attach(tp1->coef*tp2->coef,tp1->expon+tp2->expon,&rear); tp2=tp2->link; } tp1=tp1->link; while(tp1){ tp2=P2;rear=PP; while(tp2){ tpe=tp1->expon+tp2->expon; tpc=tp1->coef*tp2->coef; while(rear->link&&rear->link->expon>tpe) rear=rear->link; if(rear->link&&rear->link->expon==tpe){ if(rear->link->coef+tpc) rear->link->coef+=tpc; else{ tpfree=rear->link; rear->link=tpfree->link; free(tpfree); } } else{ tpadd=(Polynomial)malloc(sizeof(struct PolyNode)); tpadd->coef=tpc;tpadd->expon=tpe; tpadd->link=rear->link; rear->link=tpadd; rear=rear->link; } tp2=tp2->link; } tp1=tp1->link; } tpfree=PP;PP=PP->link;free(tpfree); return PP;}
0 0
- 一元多项式的乘法与加法运算 PTA02-线性结构1
- 线性结构2 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 数据结构 PAT 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算 (20分)
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算[网易云课堂-数据结构]
- 02-线性结构1 一元多项式的乘法与加法运算 -数据结构
- [PAT] 02-线性结构2 一元多项式的乘法与加法运算
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (java)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- OJytu:Problem D: C语言习题5.12--查闰年
- javascript实现n阶乘的2个方法
- 数据库基础 - 2.结构化查询语言SQL
- windows7下emacs安装
- 三、String类的获取功能
- 一元多项式的乘法与加法运算 PTA02-线性结构1
- javascript dom 操作
- C enum用法
- 合并k个有序链表
- ubuntu 安装 jdk+myeclipse
- 汇编语言学习(二)
- iOS之短信,邮件,通信录技术的完美实现
- opencv文件读写(二)使用多种方式及用法
- 【Netty4 简单项目实践】五、Netty4接收HTTP文件上传