PTA一元多项式的乘法与加法运算 另一种算法
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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一元多项式的乘法与加法运算 另一种算法的更多相关文章
- PTA 02-线性结构2 一元多项式的乘法与加法运算 (20分)
原题地址 https://pta.patest.cn/pta/test/15/exam/4/question/710 5-2 一元多项式的乘法与加法运算 (20分) 设计函数分别求两个一元多项式的 ...
- PTA数据结构 习题3.6 一元多项式的乘法与加法运算 (20分)
一元多项式的乘法与加法运算 https://pintia.cn/problem-sets/434/problems/5865 设计函数分别求两个一元多项式的乘积与和. 时间限制:200 ms 内存限制 ...
- 线性结构2 一元多项式的乘法与加法运算 【STL】
02-线性结构2 一元多项式的乘法与加法运算(20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和 ...
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- 线性结构CT 02-线性结构1 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- 浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分 ...
- 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)
题目链接:http://pat.zju.edu.cn/contests/ds/3-04 设计函数分别求两个一元多项式的乘积与和. 输入格式说明: 输入分2行.每行分别先给出多项式非零项的个数.再以指数 ...
- 一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】
设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- 一元多项式的乘法与加法运算(C语言)
输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方 ...
- 小白专场-多项式乘法与加法运算-c语言实现
目录 一.题意理解 二.求解思路 三.多项式的表示 3.1 数组 3.2 链表 四.程序框架搭建 五.如何读入多项式 六.如何将两个多项式相加 七.如何将两个多项式相乘 八.如何将多项式输出 一.题意 ...
随机推荐
- 事务(Transaction)逻辑应用
1.什么是事务? 是一个逻辑工作单元,这个工作单元中的所有操作,要么都成功,要么都失败 2.事务是如何保证数据的正确性的? 通过事务的四大特性:原子性.一致性.隔离性.持久性 原子性(Atomicit ...
- easyui 使用技巧
一:easyui treegrid重新加载数据 1:self.grid.treegrid('loadData', []);//清空数据 self.grid.queryParams({});//重新加载 ...
- Django-django-celery的配置
1.安装django-celery pip install django-celery 2.添加配置 demos/demos/settings.py(我的项目名为demos,这里只是示范,切勿搞混 ...
- java中post推送json格式字符串
最近项目中遇到post推送json格式字符串,之前写过推送json数据,调用失败,才发现是直接推送字符串,只不过字符串是json的格式. 在postman中调用如下: Java中代码如下: /** * ...
- Fiddle 简单用法
下载安装后,还要下载证书放到浏览器 https://zhuanlan.zhihu.com/p/439203346
- firefox用于web安全测试的插件[转]
备份用 目录[-] firebug 油猴子Greasemonkey JavaScript Debugger flagfox tamper data live http headers modify h ...
- SVNKit使用相关工具类
SVNKit操作SVN仓库 导入依赖 <dependency> <groupId>org.tmatesoft.svnkit</groupId> <artifa ...
- 看K线学炒股(0803)
高位板块的高位个股要回避,即便走反抽行情也要慎重.像容捷股份. 同是房地产行业的荣盛发展和西藏城投,差别怎么这么大?荣盛发展市净率0.4,西藏城投是4.8,市盈率更是一个天上一个地下,但股价呢?所以股 ...
- 安装git-lfs
git大文件报错: smudge filter lfs failedwarning: 克隆成功,但是检出失败.您可以通过 'git status' 检查哪些已被检出,然后使用命令'git checko ...
- linux 删除暂时无用内容
查看磁盘使用情况[root@localhost games]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup- ...