02-线性结构1 一元多项式的乘法与加法运算
来源:互联网 发布:淘宝页头两侧图片 编辑:程序博客网 时间:2024/06/13 06:16
02-线性结构1 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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 <iostream>#include <stdio.h>#include <stdlib.h>#define N 1000using namespace std;///1307typedef struct node{ int xi; int eop; struct node * next;} Node;void display(Node *p){ Node *pt=NULL,*pr=NULL,*ps=NULL; if (p->next==NULL) { printf("0 0\n"); } else { for (pt=p->next; pt!=NULL; pt=pt->next) { printf("%d %d",pt->xi,pt->eop); if (pt->next==NULL) { printf("\n"); } else { printf(" "); } } }}int main(){ int i,numA,numB,x,e; Node *a=NULL,*b=NULL,*sum=NULL,*mul=NULL; Node *pt=NULL,*pr=NULL,*ps=NULL; Node *pa=NULL,*pb=NULL; scanf("%d",&numA); for (i=0; i<numA; i++) { scanf("%d %d",&x,&e); if (x==0) { continue; } pt = (Node *)malloc(sizeof(Node)); pt->xi=x; pt->eop=e; pt->next=NULL; if (a==NULL) { a=pt; pr=pt; } else { pr->next=pt; pr=pt; } } if (a==NULL) { pt = (Node *)malloc(sizeof(Node)); pt->xi=0; pt->eop=0; pt->next=NULL; a=pt; } scanf("%d",&numB); for (i=0; i<numB; i++) { scanf("%d %d",&x,&e); if (x==0) { continue; } pt = (Node *)malloc(sizeof(Node)); pt->xi=x; pt->eop=e; pt->next=NULL; if (b==NULL) { b=pt; pr=pt; } else { pr->next=pt; pr=pt; } } if (b==NULL) { pt = (Node *)malloc(sizeof(Node)); pt->xi=0; pt->eop=0; pt->next=NULL; b=pt; } ///================ mul =(Node *)malloc(sizeof(Node)); mul->next=NULL; for (pa=a; pa!=NULL; pa=pa->next) { // printf("11"); for (pb=b; pb!=NULL; pb=pb->next) { pt = (Node *)malloc(sizeof(Node)); pt->next=NULL; pt->xi=pa->xi*pb->xi; pt->eop=pa->eop+pb->eop; if (mul->next==NULL) { mul->next=pt; pr=mul; } else { for (ps=mul->next,pr=mul; ps!=NULL; ps=ps->next,pr=pr->next) { if (pt->eop>ps->eop) { pt->next=ps; pr->next=pt; break; } else if (pt->eop==ps->eop) { ps->xi+=pt->xi; if (ps->xi==0) { pr->next=ps->next; free(ps); } else { free(pt); } break; } } if (ps==NULL) { pr->next=pt; } } } } for (pt=mul->next,pr=mul; pt!=NULL; pt=pt->next,pr=pr->next) { if (pt->xi==0) { pr->next=pt->next; ps=pr->next; free(ps); } } display(mul); ///================================================= pt=a; sum =(Node *)malloc(sizeof(Node)); sum->next=NULL; for (pa=a,pb=b; pa!=NULL&&pb!=NULL;) { pt = (Node *)malloc(sizeof(Node)); pt->next =NULL; if (pa->eop > pb->eop) { pt->eop =pa->eop; pt->xi =pa->xi; pa =pa->next; } else if (pa->eop < pb->eop) { pt->eop =pb->eop; pt->xi =pb->xi; pb =pb->next; } else { pt->eop =pa->eop; pt->xi =pa->xi+pb->xi; pb =pb->next; pa =pa->next; } if (sum->next==NULL) { sum->next=pt; pr=sum->next; } else { pr=pr->next=pt; } } if (pa!=NULL) { pr->next=pa; } else { pr->next=pb; } for (pt=sum->next,pr=sum; pt!=NULL; pt=pt->next,pr=pr->next) { if (pt->xi==0) { pr->next=pt->next; ps=pr->next; free(ps); } } display(sum);// cout << "Hello world!" << endl; return 0;}
0 0
- 线性结构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分)
- 02-线性结构2 一元多项式的乘法与加法运算
- 使用u-boot_2016_01启动mini2440(一)启动代码
- STM32 JNTRST JTDI JTDO(PB4 PB3 PA15)引脚用做普通IO方法
- 阅读《Android 从入门到精通》(36)——Notification 通知
- Java笔记 - 线程基础知识
- ViewGroup 添加移除View 常用几种方式的区别
- 02-线性结构1 一元多项式的乘法与加法运算
- 【MFC】:MFC如何实现给按钮加图标背景
- win7+iis7+asp+.net+php环境配置
- (算法问题)贪吃蛇游戏改编版
- MVVM下DataGrid的简单应用
- 剑指offer面试题之二叉树中和为某一值的所有路径
- 求素数
- poj1017 最优解问题
- Android view中invalidate方法学习小节