输入格式:
输入分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

本题解题思路:
1:由于本题输入是以大小递减的方式输入,且输出也是按照递减的方式输出,所以相当于是按照顺序来的,所以我们可以用单链表的方式进行解决。
2:注意多项式的乘法涉及到多项式的合并,所以在设计函数的时候要把这些情况考虑进去。

模块函数

typedef struct PolyNode *Polynomial;
//定义结构体
struct PolyNode
{int coef;int expon;Polynomial link;
};Polynomial ReadPoly();
//链表的输入
void Attach(int c, int e, Polynomial* pRear);
//链表的衔接
Polynomial Add(Polynomial P1, Polynomial P2);
//多项式 的加法
Polynomial Mult(Polynomial P1, Polynomial P2);
//多项式的乘法
void PrintPoly(Polynomial P);
//打印链表
int Compare(int a, int b);
//比较值得大小

整体的代码

#include<stdio.h>
#include<stdlib.h>
// 多项式相乘 相加
// 数据结构设计
typedef struct PolyNode *Polynomial;
struct PolyNode
{int coef;int expon;Polynomial link;
};Polynomial ReadPoly();
void Attach(int c, int e, Polynomial* pRear);
Polynomial Add(Polynomial P1, Polynomial P2);
Polynomial Mult(Polynomial P1, Polynomial P2);
void PrintPoly(Polynomial P);
int Compare(int a, int b);// 程序框架搭建
int main()
{Polynomial P1, P2, PP, PS;P1 = ReadPoly();P2 = ReadPoly();PP = Mult(P1, P2);PrintPoly(PP);PS = Add(P1, P2);PrintPoly(PS);return 0;
}// 如何读入多项式Polynomial ReadPoly()
{Polynomial p, rear, t;int c, e, n;scanf("%d", &n);p = (Polynomial)malloc(sizeof(Polynomial));p->link = NULL;rear = p;while (n--){scanf("%d %d", &c, &e);Attach(c, e, &rear);//将当前输入项插入多项式尾部}t = p;p = p->link;free(t);return p;
}void Attach(int c, int e, Polynomial* pRear)
{Polynomial P;P = (Polynomial)malloc(sizeof(struct PolyNode));P->coef = c; // 对新结点赋值P->expon = e;P->link = NULL;(*pRear)->link = P;*pRear = P; // 修改pRear的值
}int Compare(int a, int b)
{if (a > b)    return 1;else if (a < b)   return -1;else    return 0;
}// 多项式相加
Polynomial Add(Polynomial P1, Polynomial P2)
{Polynomial P, Rear, t, t1, t2;t1 = P1; t2 = P2;P = (Polynomial)malloc(sizeof(struct PolyNode));P->link = NULL;Rear = P;while (t1 && t2){switch (Compare(t1->expon, t2->expon)){case 1:Attach(t1->coef, t1->expon, &Rear);t1 = t1->link;break;case -1:Attach(t2->coef, t2->expon, &Rear);t2 = t2->link;break;case 0:if (t1->coef + t2->coef)   Attach(t1->coef + t2->coef, t1->expon, &Rear);t1 = t1->link;t2 = t2->link;break;}}//注意细心,不要把遍历写到前面那个括号去了for (; t1; t1 = t1->link) Attach(t1->coef, t1->expon, &Rear);for (; t2; t2 = t2->link) Attach(t2->coef, t2->expon, &Rear);Rear->link = NULL;t = P;P = P->link;free(t);return P;
}// 多项式相乘
Polynomial Mult(Polynomial P1, Polynomial P2)
{Polynomial P, Rear, t1, t2, t;int c, e;if (!P1 || !P2)  return NULL;t1 = P1;P = (Polynomial)malloc(sizeof(struct PolyNode));P->link = NULL; while (t1){t2 = P2; Rear = P;//必须在里面,每个数字都要循环遍历while (t2){e = t1->expon + t2->expon;c = t1->coef * t2->coef;while (Rear->link!=NULL && Rear->link->expon > e) Rear = Rear->link;if (Rear->link && Rear->link->expon == e){   // 指数的系数相等if (Rear->link->coef + c!=0)Rear->link->coef += c;else {Rear->link = Rear->link->link;                  }}else    // 指数的系数不相等{t = (Polynomial)malloc(sizeof(struct PolyNode));t->coef = c;t->expon = e;t->link = Rear->link;Rear->link = t;Rear = t;//Rear->link;}t2 = t2->link;}t1 = t1->link;}P = P->link;free(t2);free(t1);return P;
}// 如何将多项式输出
void PrintPoly(Polynomial P)
{int flag = 0;   // 辅助调整输出格式用if (!P){printf("0 0\n");return;}while (P){if (flag==0)   flag = 1;else    printf(" ");printf("%d %d", P->coef, P->expon);P = P->link;}printf("\n");
}

注意在多项式的加法结束后还要对各个链表进行遍历,将未进行计算的值计入其中。
如果有帮助到你点个赞再走吧!

7-2 一元多项式的乘法与加法运算 (20分) 设计函数分别求两个一元多项式的乘积与和。相关推荐

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

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

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

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

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

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

  4. 7-2 一元多项式的乘法与加法运算 (20 分)(思路加详解+map做法)map真香啊 各个测试点的用例子 来吧宝贝!

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

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

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

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

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

  7. PTA 一元多项式的乘法与加法运算 设计函数分别求两个一元多项式的乘积与和。

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

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

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

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

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

最新文章

  1. oracle新建用户名和密码,Oracle安装后忘记用户名或密码+创建新登陆用户
  2. Adhesive框架系列文章--Mongodb数据服务使用实践
  3. java强制执行方法_java – 在多台机器上强制执行单一速率限制的好方法是什么?...
  4. 船舶和计算机结合论文格式,近海船舶监控系统中航迹关联算法的计算机研究与实现...
  5. [概率论]如何通俗地理解“最大似然估计法”?
  6. 循环单链表 python_循环单链表报错
  7. Java多线程学习三十四:使用 Future 有哪些注意点?Future 产生新的线程了吗
  8. 如何打开chrome中flash debug player
  9. 使用SQL查询所有数据库名和表名
  10. U盘拷贝者MBR勒索木马分析
  11. 常用的计算机网络设备有,常用网络设备有哪些,初学者必须要知道的五大网络设备...
  12. Golang学习日志 ━━ 调用系统默认浏览器打开指定链接(全平台)
  13. win10卸载软件_win10系统频繁闪屏刷新解决方法
  14. Debian+Apache2+MySQL5+PHP5+GD
  15. vue3学习—state的变化和使用
  16. 对薛兆丰经济学思维的研究:价格的教益
  17. 最有效防电脑辐射方法
  18. vue 微信公众号 使用weixin-java-mp、JSSDK自定义分享
  19. USB2.0接口CM4_5G mini驱动板搭配广和通FM650在Win11下的测速
  20. 360Replugin插件启动Activity慢导致ANR的问题

热门文章

  1. 【论文简述】Learning Inverse Depth Regression for Pixelwise Visibility-AwareMulti-View Stereo (IJCV 2022)
  2. 关于安全生产月宣传教育答题活动的策划方案
  3. win7分辨率不能调怎么办 win7系统分辨率不能调的解决方案
  4. 可能是目前最强大的开源在线表格,不信你来看看
  5. 常见的linux包管理软件,5款最适合新手的包管理器
  6. 许多学习vba excel脚本的简单例子
  7. SQL Server 分组后,字符串拼接
  8. 【同步】文件同步命令rsync |自动同步软件FreeFileSync
  9. 老版本Ubuntu 更新源
  10. 运动无线蓝牙耳机哪个品牌好、蓝牙运动耳机排行榜10强