首页 > 代码库 > 02-线性结构2 一元多项式的乘法与加法运算
02-线性结构2 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
输入样例:
4 3 4 -5 2 6 1 -2 03 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 15 20 -4 4 -5 2 9 1 -2 0
#include <cstdio>#include <cstdlib>using namespace std;typedef struct PolyNode *Polynomial; //struct PolyNode{ //系数指数 int coef; int expon; Polynomial link;};void Add(int c,int e,Polynomial * rear){ Polynomial p= new PolyNode; p->coef=c; p->expon=e; p->link= NULL; (*rear)->link = p; *rear= p;}Polynomial Mult(Polynomial p1 ,Polynomial p2){ Polynomial p = new PolyNode,t1=p1,t2=p2,t; p->link=NULL; Polynomial rear = p; int e,c; if(!p1||!p2) return NULL; while(t2) { if(t2->coef*t1->coef!=0) Add(t2->coef*t1->coef,t1->expon+t2->expon,&rear); t2=t2->link; } t1=t1->link; while(t1){ rear=p;t2=p2; while(t2){ e=t1->expon+t2->expon; c=t1->coef*t2->coef; while(rear->link&&rear->link->expon>e) rear=rear->link; if(rear->link&&rear->link->expon==e){ if(rear->link->coef+c) rear->link->coef+=c; else { t=rear->link; rear->link=t->link; delete t; } } else{ t=new PolyNode; t->coef=c;t->expon=e; t->link = rear->link; rear->link=t; rear=rear->link; } t2=t2->link; } t1=t1->link; } t2=p;p=p->link;delete t2; return p;}Polynomial ReadPoly(){ Polynomial P,rear,t; P= new PolyNode; P->link=NULL; rear=P; int n,c,e; scanf("%d",&n); while(n--){ scanf("%d%d",&c,&e); Add(c,e,&rear); } t=P; P=P->link; delete t; return P;}void print(Polynomial p){ int flag=1; if(!p) printf("0 0"); while(p){ if(flag){ printf("%d %d",p->coef,p->expon); flag=0; } else{ printf(" %d %d",p->coef,p->expon); } p=p->link; } printf("\n");}Polynomial ADD(Polynomial p1,Polynomial p2){ Polynomial p,t1=p1,t2=p2,rear; p = new PolyNode; p->link =NULL; rear = p; while(t1&&t2) { if(t1->expon==t2->expon) { int s = t1->coef+t2->coef; if(s!=0) { Add(s,t1->expon,&rear); } t1=t1->link; t2=t2->link; } else { if(t1->expon>t2->expon) { Add(t1->coef,t1->expon,&rear); t1=t1->link; } else { Add(t2->coef,t2->expon,&rear); t2=t2->link; } } } while(t2) { Add(t2->coef,t2->expon,&rear); t2=t2->link; } while(t1) { Add(t1->coef,t1->expon,&rear); t1=t1->link; } t1=p; p=p->link; delete t1; return p;}int main(){ //freopen("in.txt","r",stdin); Polynomial p1,p2,pp,ps; p1=ReadPoly(); p2=ReadPoly(); pp=Mult(p1,p2); print(pp); ps=ADD(p1,p2); print(ps); return 0;}
02-线性结构2 一元多项式的乘法与加法运算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。