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

输入格式:
输入分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
struct node{int coef; //系数int expn; //指数node* next;
};
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{int coef; //系数int expn; //指数node* next;
};
node* creat_list(int n){ //读入链表node  *head, *r;head = new node;r = head; int coef , expn;while(n--){scanf("%d%d",&coef,&expn);node* tmp = new node; //创建临时结点tmp->coef = coef;tmp->expn = expn;r->next = tmp; //临时结点接到链表中r = tmp;}r->next = NULL; //结尾设为 NULLreturn head;
}
node* add_list(node* a,node* b){node *r,*fans, *ans;node *ha,*hb; //为了防止修改指针本身的值,使用代理指针来完成操作,也就是游标。fans = new node;ans = fans; //ans 作为fans 的”游标“ha = a->next;hb = b->next;while(ha && hb){node* tmp = new node; //建立一次即可if(ha->expn > hb->expn){ //每次把指数(exponent)较大的加入链表fanstmp->coef = ha->coef;tmp->expn = ha->expn;ans->next = tmp;ans = tmp;ha = ha->next;}else if(ha->expn < hb->expn){tmp->coef = hb->coef;tmp->expn = hb->expn;ans->next = tmp;ans = tmp;hb = hb->next;}else{int mulOfcoef = (ha->coef)+(hb->coef); //如果指数相同, 就把系数求和。if(mulOfcoef!=0){tmp->coef = mulOfcoef;tmp->expn = ha->expn;ans->next = tmp;ans = tmp;}ha = ha->next; //注意这里 即使和为0 ,也要移动“游标”hb = hb->next;}}while(ha){node* tmp = new node;tmp->coef = ha->coef;tmp->expn = ha->expn;ans->next = tmp;ans = tmp;ha = ha->next;}while(hb){node* tmp = new node;tmp->coef = hb->coef;tmp->expn = hb->expn;ans->next = tmp;ans = tmp;hb = hb->next;}ans->next = NULL; //结尾设为 NULLreturn fans;
}
node* multi_list(node* a,node* b){node* ha, *hb;node* ans,*fans;ha = a->next;hb = b->next;fans = creat_list(0);if(ha == NULL || hb == NULL){return fans;}node* tmp;while(ha != NULL){tmp = new node;ans = tmp;hb = b->next; //每次都是从 b 的第一项开始乘;while(hb != NULL){node* ltmp = new node;ltmp->expn = ha->expn + hb->expn; //指数相加,系数相乘ltmp->coef = ha->coef * hb->coef;hb = hb->next;ans->next= ltmp;ans = ltmp;}ans->next = NULL;fans = add_list(fans,tmp); //将乘法 分解成一次次的加法ha = ha->next;}return fans;
}
void print_list(node* l){node *hc;int flag = 0;hc = l->next; //指针操作常用,用新创立的节点代替源节点操作if(hc == NULL){ //格式控制 。。 真坑!printf("0 0");}while(hc != NULL){if(flag)printf(" ");elseflag = 1;printf("%d %d",hc->coef,hc->expn);hc = hc->next;}
}
int main(){int n;scanf("%d",&n);node *a = creat_list(n);int m;scanf("%d",&m);node* b = creat_list(m);node* c = add_list(a,b);node* d = multi_list(a,b);print_list(d);printf("\n");print_list(c);printf("\n");return 0;
}


mooc浙大数据结构PTA习题之一元多项式的乘法与加法运算相关推荐

  1. 浙大数据结构题集02-线性结构2 一元多项式的乘法与加法运算python版

    浙大数据结构题集02-线性结构2 一元多项式的乘法与加法运算python版 设计函数分别求两个一元多项式的乘积与和. 本文用链表做的 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数 ...

  2. PTA:编程题:7-1 一元多项式的乘法与加法运算 (20 分)

    大一下半期数据结构 数据结构题目集 一元多项式的乘法与加法运算 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项 ...

  3. 习题3.6 一元多项式的乘法与加法运算 (20 分)(有测试点具体数据)c语言链表版本

    习题3.6 一元多项式的乘法与加法运算 (20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数 ...

  4. 7-2一元多项式的乘法与加法运算

    title: "7-2一元多项式的乘法与加法运算(20" date: 2018-06-14T01:09:46+08:00 tags: [""] categori ...

  5. PTA->一元多项式的乘法与加法运算

    一元多项式的乘法与加法运算 1.问题描述 2.问题分析 2.1定义多项式数据结构结点数据PolyNode 2.2将数据结点连接到多项式后面Attach 2.3读入多项式数据结点ReadPoly 2.4 ...

  6. 7-2 一元多项式的乘法与加法运算 (20 分)

    7-2 一元多项式的乘法与加法运算 (20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝 ...

  7. PTA 7-1 一元多项式的乘法与加法运算 (20 分)

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

  8. 中国大学MOOC浙大数据结构PTA课后题

    在这里占个坑,记录一下学习数据结构中例题 目录 二叉树的同构 1.建树 2.判断是否为同构 3.同类型题目 是否同一棵二叉搜索树 思路 代码 二叉树的同构 题目:题目详情 - 03-树1 树的同构 ( ...

  9. 浙江大学 PTA习题3.6 一元多项式的乘法与加法运算 (20分)

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

最新文章

  1. Linux用cron发送信息,Python在linux上用cron作业发送KDE knotify消息?
  2. 红帽中出现”This system is not registered with RHN”的解决方案
  3. import export php,import与export在node.js中的使用方法
  4. 【django】全局上下文
  5. 计算机专业毕业生管理制度,管理制度建设
  6. 如何选择开源许可证?(转)
  7. 萌新的Python练习菜鸟100例(十一)生兔子练习
  8. Cannot subclass final class class com.sun.proxy.$Proxy16
  9. 前端代码异常日志收集与监控
  10. 约束最优化方法 (一) 最优性条件
  11. android hd 输入法,Android上好用的Lime HD中文输入法03--更好的使用篇
  12. OpenTCS 之 DefaultDispatcher 默认调度算法
  13. 万字长文,详解线上线下收单业务(二):系统交互
  14. 单细胞论文记录(part7)--DL and alignment of spatially resolved single-cell transcriptomes with Tangram
  15. 获取字符串长度的几种办法
  16. php post 漏洞_ThinkPHP5 5.0.23 远程代码执行漏洞
  17. k8s开启IPVS模式
  18. alt 和 title 的区别
  19. ZAFU_2021_2_17_2021寒假个人赛第四场题解
  20. gvim for verilog简易配置

热门文章

  1. face.evoLVe.PyTorch
  2. C++操作Redis的简单例子
  3. K-means算法、高斯混合模型 matlab
  4. idea main java.lang.ClassNotFoundException
  5. OpenMP在ARM-Linux以及NDK中的编译和使用
  6. 双边滤波算法的原理、流程、实现及效果
  7. ios php 序列化,PHP常见的序列化与反序列化操作实例分析
  8. 删除单链上数据域值最小的节点_深入浅出数据结构
  9. linux关机_【linux】 不要再暴力关机了,讲讲我最近遇到的问题和完美解决方案...
  10. Linu网络判断指令ping、curl、telnet的区别与应用场景