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

输入格式:

输入分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;
}; Polynomial ReadPoly(void); // 采用带头节点插入的方法建立多项式链表 先建立带头节点的链表读入多项式数据 最后删除头节点
Polynomial Mult(Polynomial P1,Polynomial P2);
Polynomial Add(Polynomial P1,Polynomial P2);
void PrintPoly(Polynomial P);
void Attach(int coef,int expon, Polynomial *pRear); //增加新节点到多项式链表后 pRear 指向链表最后节点地址的指针
void DeletePoly(Polynomial p); // 删除一个多项式链表 int main(){
Polynomial P1,P2,PP,PS; P1 = ReadPoly();
// PrintPoly(P1);
P2 = ReadPoly();
PP = Mult(P1,P2);
PrintPoly(PP);
PS = Add(P1,P2);
PrintPoly(PS); return 0;
} void Attach(int coef,int expon, Polynomial *pRear){
Polynomial p;
p = (Polynomial)malloc(sizeof(struct PolyNode));
p->coef = coef;
p->expon = expon;
p->link = NULL;
(*pRear)->link = p;
*pRear = p;
} Polynomial ReadPoly(void){
Polynomial P,Rear,t;
int n;
int coef,expon;
scanf("%d",&n);
P = (Polynomial)malloc(sizeof(struct PolyNode)); // 建立链表空的头节点
P->link = NULL;
Rear = P;
while (n--) {
scanf("%d %d",&coef,&expon);
Attach(coef,expon,&Rear);
}
t = P;
P = P->link;
free(t);
return P;
} void PrintPoly(Polynomial P){
int flag = 0;
if(P == NULL){
printf("0 0\n");
return;
}
// 最后一个没有空格 相当于除了开始,后面%d %d输出中间都有空格
while (P) {
if(!flag)
flag = 1;
else
printf(" ");
printf("%d %d",P->coef,P->expon);
P = P->link;
}
printf("\n");
} Polynomial Add(Polynomial P1,Polynomial P2){
Polynomial t1 = P1,t2 = P2,t;
Polynomial p,rear;
p = (Polynomial)malloc(sizeof(struct PolyNode));
rear = p;
while (t1 && t2) {
if(t1->expon == t2->expon){
if(t1->coef + t2->coef){
Attach(t1->coef+t2->coef, t1->expon, &rear);
t1 = t1->link;
t2 = t2->link;
}else{
t1 = t1->link;
t2 = t2->link;
}
}else if (t1->expon > t2->expon){
Attach(t1->coef, t1->expon, &rear);
t1 = t1->link;
}else{
Attach(t2->coef, t2->expon, &rear);
t2 = t2->link;
}
}
while (t1) {
Attach(t1->coef, t1->expon, &rear);
t1 = t1->link;
}
while (t2) {
Attach(t2->coef, t2->expon, &rear);
t2 = t2->link;
}
t = p;
p = p->link;
free(t);
return p;
} // 多项式相乘算法:
// 第一个多项式第一项和第二个多项式所有项相乘得到结果多项式P
// 遍历第一个多项式其他元素和第二个多项式相乘一个一个元素插入到结果多项式P中
Polynomial Mult(Polynomial P1,Polynomial P2){
Polynomial P,Rear,t1,t2,t;
int coef,expon; if(!P1 || !P2) // 多项式为NULL 多项式输出 ceof expon为0
return NULL; t1 = P1;
t2 = P2;
P = (Polynomial)malloc(sizeof(struct PolyNode));
Rear = P;
while (t2) {
Attach(t1->coef*t2->coef, t1->expon+t2->expon, &Rear);
t2 = t2->link;
}
t1 = t1->link;
while (t1) {
t2 = P2;
Rear = P;
while (t2) {
expon = t1->expon + t2->expon;
coef = t1->coef * t2->coef;
while (Rear->link && Rear->link->expon > expon) {
Rear = Rear->link;
}
if(Rear->link && Rear->link->expon == expon){
if(Rear->link->coef + coef){
Rear->link->coef = Rear->link->coef + coef;
}else{
t = Rear->link;
Rear->link = t->link;
free(t);
}
}else{
t = (Polynomial)malloc(sizeof(struct PolyNode));
t->expon = expon;
t->coef = coef;
t->link = Rear->link;
Rear->link = t;
Rear = Rear->link;
}
t2 = t2->link;
}
t1 = t1->link;
}
t = P;
P = P->link;
free(t);
return P;
}

PTA一元多项式的乘法与加法运算 另一种算法的更多相关文章

  1. PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)

    原题地址 https://pta.patest.cn/pta/test/15/exam/4/question/710 5-2 一元多项式的乘法与加法运算   (20分) 设计函数分别求两个一元多项式的 ...

  2. PTA数据结构 习题3.6 一元多项式的乘法与加法运算 (20分)

    一元多项式的乘法与加法运算 https://pintia.cn/problem-sets/434/problems/5865 设计函数分别求两个一元多项式的乘积与和. 时间限制:200 ms 内存限制 ...

  3. 线性结构2 一元多项式的乘法与加法运算 【STL】

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

  4. PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)

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

  5. 线性结构CT 02-线性结构1 一元多项式的乘法与加法运算

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

  6. 浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算

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

  7. 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-04 设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行.每行分别先给出多项式非零项的个数.再以指数 ...

  8. 一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】

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

  9. 一元多项式的乘法与加法运算(C语言)

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

  10. 小白专场-多项式乘法与加法运算-c语言实现

    目录 一.题意理解 二.求解思路 三.多项式的表示 3.1 数组 3.2 链表 四.程序框架搭建 五.如何读入多项式 六.如何将两个多项式相加 七.如何将两个多项式相乘 八.如何将多项式输出 一.题意 ...

随机推荐

  1. jenkin创建任务

    第一步新建项目 第二步创建任务名称

  2. 富文本 HTML String 转化为 nodes 数组

    https://github.com/ant-mini-program/mini-html-parser?spm=ding_open_doc.document.0.0.4ef9722fXz27PV

  3. [Oracle19C 数据库管理] 用户与权限管理

    用户管理 用户具有以下属性: 用户名: 不能超过30位.不能包含特殊字符.必须用字符开头.用户名不区分大小写. 认证方式: 最常见的是密码认证. 默认永久表空间: 控制用户可以在哪个表空间里创建对象. ...

  4. 基于CentOS搭建FTP文件服务实战

    参考教程来自腾讯云开发者实验室:https://cloud.tencent.com/developer/labs/lab/10123 话不多少,进入流程 1. 安装vsftpd 使用 yum 安装 v ...

  5. NLB+ARR实现IIS下的高可用性负载均衡

    NLB+ARR实现IIS下的高可用性负载均衡 场景: 高可用/可伸缩集群: NLB部署: 很简单, 暂略.   3.ARR部署 ARR全称叫Application Request Router, 是I ...

  6. k8s_使用k8s部署wordpress博客系统(一)

    系统部署流程 使⽤kubernetes部署wordpress+MySQL, 并利⽤NFS去保存我们容器的源代码以及DB数据.搭建好nfs后任意node上的Pod访问db或者业务代码都会有相同的效果,数 ...

  7. 编译内核出现错误cc1: error: code model kernel does not support PIC mode

    删除该模块目录下的 .cache.mk 文件就好了,重新 make 即可

  8. @order(1)

    @order(num),数字表示加载顺序 1.AOP加载顺序(切面加载顺序) 2.配置类加载顺序

  9. String.prototype.replace--替换字符串

    str.replace(regexp|substr, newSubStr|function)     API本身不改变原本的字符串,只是返回新的字符串例子:用函数作为第二个参数function rep ...

  10. 项目中pom.xml的某些坐标无法加载

    项目中pom.xml的某些坐标无法加载 maven官方查找对应的坐标文件下载 https://mvnrepository.com/artifact/com.fasterxml.jackson.core ...