线性结构CT 02-线性结构1 一元多项式的乘法与加法运算
2015-10-01 00:12
337 查看
设计函数分别求两个一元多项式的乘积与和。
需注意的点:需系数为0时的处理!
乘法运算实现方法即多项式逐项相乘的手算方法,将所得单项结果有序插入第一个多项式第一项与第二个多项式所得的多项式P中。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出00。
输入样例:
434-5261-20 3520-7431
输出样例:
1524-25223021-1020-218356-335144-153182-61 520-44-5291-20
#include<stdio.h> #include<stdlib.h> typedefstructPolyNode*Polynomial; structPolyNode { intcoef; intexpon; structPolyNode*next; }; PolynomialReadPoly(); voidAttach(intc,inte,Polynomial*pReal); PolynomialAdd(PolynomialP1,PolynomialP2); PolynomialMult(PolynomialP1,PolynomialP2); voidPrintPoly(PolynomialP); intmain() { PolynomialP1,P2,PMult,PSum; P1=ReadPoly(); P2=ReadPoly(); PMult=Mult(P1,P2); PrintPoly(PMult); PSum=Add(P1,P2); PrintPoly(PSum); return0; } PolynomialReadPoly() { PolynomialP,Rear,t; intc,e,N; scanf("%d",&N); P=(Polynomial)malloc(sizeof(structPolyNode)); P->next=NULL; Rear=P; while(N--){ scanf("%d%d",&c,&e); Attach(c,e,&Rear); } t=P; P=P->next; free(t); returnP; } voidAttach(intc,inte,Polynomial*pReal) { PolynomialP; P=(Polynomial)malloc(sizeof(structPolyNode)); P->coef=c; P->expon=e; P->next=NULL; (*pReal)->next=P; *pReal=P; } PolynomialAdd(PolynomialP1,PolynomialP2) { PolynomialP,t1,t2,t,Rear; if(!P1&&!P2){ if(!P1) returnP2; else returnP1; } P=(Polynomial)malloc(sizeof(structPolyNode)); P->next=NULL; Rear=P; t1=P1; t2=P2; while(t1&&t2){ if(t1->expon==t2->expon){ if(t1->coef+t2->coef) Attach(t1->coef+t2->coef,t1->expon,&Rear); t1=t1->next; t2=t2->next; } elseif(t1->expon>t2->expon){ if(t1->coef) Attach(t1->coef,t1->expon,&Rear); t1=t1->next; } else{ if(t2->coef) Attach(t2->coef,t2->expon,&Rear); t2=t2->next; } } while(t1){ if(t1->coef) Attach(t1->coef,t1->expon,&Rear); t1=t1->next; } while(t2){ if(t2->coef) Attach(t2->coef,t2->expon,&Rear); t2=t2->next; } t=P; P=P->next; free(t); returnP; } PolynomialMult(PolynomialP1,PolynomialP2) { PolynomialP,t1,t2,t,Rear; intc,e; if(!P1||!P2) returnNULL; t1=P1; t2=P2; P=(Polynomial)malloc(sizeof(structPolyNode)); P->next=NULL; Rear=P; while(t2){ if(t1->coef*t2->coef){ Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear); } t2=t2->next; } t1=t1->next; while(t1){ t2=P2; Rear=P; while(t2){ e=t1->expon+t2->expon; c=t1->coef*t2->coef; while(Rear->next&&Rear->next->expon>e) Rear=Rear->next; if(Rear->next&&Rear->next->expon==e){ if(Rear->next->coef+c) Rear->next->coef+=c; else{ t=Rear->next; Rear->next=t->next; free(t); } } else{ if(c){ t=(Polynomial)malloc(sizeof(structPolyNode)); t->coef=c; t->expon=e; t->next=Rear->next; Rear->next=t; Rear=Rear->next; } } t2=t2->next; } t1=t1->next; } t2=P; P=P->next; free(t2); returnP; } voidPrintPoly(PolynomialP) { intflag=0; if(!P) printf("00"); while(P){ if(!flag) flag=1; else printf(""); printf("%d%d",P->coef,P->expon); P=P->next; } printf("\n"); }
需注意的点:需系数为0时的处理!
乘法运算实现方法即多项式逐项相乘的手算方法,将所得单项结果有序插入第一个多项式第一项与第二个多项式所得的多项式P中。
相关文章推荐
- ASP.NET动态网站制作(4)--css(3)
- codeforces 519E A and B and Lecture Rooms LCA倍增
- pip fail with bad md5 hash for package?解决方案(Mac OS 10.10.4)
- svg转换工具
- Java中final关键字的用法
- 开始的标记_2015年10月1日00:05:59
- 生成8位26个字母和数字的全排列(密码字典,密钥)c++代码(非递归高效直接)
- 使用Java 8函数式编程生成字母序列
- U盘装CentOS6.4
- java图片缩放
- 深入解析StringBuffer和StringBuilder的区别
- Codeforces Round #322 (Div. 2) D. Three Logos 模拟
- Week 2 代码审查
- Course Schedule II 解答
- [pythontip]最大非连续子序列
- 欢迎使用CSDN-markdown编辑器
- Find them, Catch them
- 了解"DevOps"
- Java Swing编程:JTable表格
- LeetCode260——Single Number III精彩解法