当前位置: 首页 > news >正文

编程题 02-线性结构2 一元多项式的乘法与加法运算【PAT】

文章目录

  • 题目
    • 输入格式
    • 输出格式
    • 输入样例
    • 输出样例
  • 题解
    • 解题思路
    • 完整代码

编程练习题目集目录

题目

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

输入格式

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

输出格式

输出分 2 2 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 <iostream>
using namespace std;// 定义多项式项的结构
struct Node {int Term;    // 系数int Expon;   // 指数Node* Next;  // 指向下一个节点的指针
};// 使用别名简化代码
using List = Node*;// 声明函数
List Read();
void Print(List L);
List Add(List L1, List L2);
List Multi(List L1, List L2);
List MultiByNode(List L1, Node L2);int main(void) {List L1, L2, LAdd, LMulti;L1 = Read();L2 = Read();LMulti = Multi(L1, L2);LAdd = Add(L1, L2);Print(LMulti);Print(LAdd);return 0;
}// 读取多项式
List Read() {List L, head;L = new Node;L->Next = nullptr;head = L;int n;cin >> n;if (n > 0) {for (int i = 0; i < n; i++) {List temp = new Node;                   // 创建新节点cin >> temp->Term >> temp->Expon;       // 输入系数和指数temp->Next = nullptr;                   // 初始化新节点的Next指针L->Next = temp;                         // 将新节点链接到链表中L = temp;                               // 移动指针}}return head;
}// 打印多项式
void Print(List L) {List p = L->Next;               // 跳过头节点if (!p) {cout << "0 0" << endl;      // 如果多项式为空,输出0 0} else {while (p) {if (p->Next) {cout << p->Term << " " << p->Expon << " ";      // 输出当前项,不换行} else {cout << p->Term << " " << p->Expon << endl;     // 输出最后一项,换行}p = p->Next;                                        // 移动到下一个节点}}
}// 多项式相加
List Add(List L1, List L2) {List L, head, t1, t2;L = new Node;L->Next = nullptr;head = L;t1 = L1->Next;t2 = L2->Next;while (t1 && t2) {                      // 遍历两个多项式List temp = new Node;               // 创建新节点temp->Next = nullptr;               // 初始化新节点的Next指针if (t1->Expon > t2->Expon) {        // 比较指数temp->Term = t1->Term;temp->Expon = t1->Expon;L->Next = temp;                 // 将新节点链接到结果链表L = temp;                       // 移动指针t1 = t1->Next;} else if (t1->Expon < t2->Expon) {temp->Term = t2->Term;temp->Expon = t2->Expon;L->Next = temp;L = temp;t2 = t2->Next;} else if (t1->Expon == t2->Expon) {            // 指数相等if ((t1->Term + t2->Term) == 0) {           // 系数相加为0,抵消t1 = t1->Next;t2 = t2->Next;} else {temp->Term = t1->Term + t2->Term;temp->Expon = t1->Expon;L->Next = temp;L = temp;t1 = t1->Next;t2 = t2->Next;}}}// 将剩余的项直接链接到结果链表if (t1 == nullptr) {L->Next = t2;} else if (t2 == nullptr) {L->Next = t1;}return head;
}// 多项式相乘
List Multi(List L1, List L2) {List L, head, t1, t2, temp;L = new Node;L->Next = nullptr;head = L;t1 = L1->Next;t2 = L2->Next;if (t1 && t2) {                         // 如果两个多项式都不为空temp = MultiByNode(L1, *t2);        // 逐项相乘t2 = t2->Next;while (t2) {List temp2 = MultiByNode(L1, *t2);temp = Add(temp, temp2);        // 将结果相加t2 = t2->Next;}L->Next = temp->Next;               // 链接最终结果}return head;
}// 单项与多项式相乘
List MultiByNode(List L1, Node L2) {List L, head, t1;L = new Node;L->Next = nullptr;head = L;t1 = L1->Next;while (t1) {List temp = new Node;                   // 创建新节点temp->Next = nullptr;                   // 初始化新节点的Next指针temp->Term = t1->Term * L2.Term;        // 系数相乘temp->Expon = t1->Expon + L2.Expon;     // 指数相加L->Next = temp;                         // 将新节点链接到结果链表L = temp;                               // 移动指针t1 = t1->Next;}return head;
}

相关文章:

  • PostgreSQL 的 pg_current_logfile 函数
  • 【Ubuntu】Netplan静态网络配置
  • 缺乏实体人形机器人的主流高精度仿真方案
  • Flutter接入ProtoBuff和原生Android通信【性能最优】
  • tmux 入门与实用指南
  • 39、.NET GC是什么? 为什么需要GC?
  • 深泽多层电路在PCB行业中属于什么水平
  • 初识Linux · 传输层协议TCP · 上
  • Python爬虫中time.sleep()与动态加载的配合使用
  • C语言自定义类型:联合与枚举详解
  • 手撕基于AMQP协议的简易消息队列-2(所用第三方库的介绍与简单使用)
  • 【MCP】为什么使用Streamable HTTP: 相比SSE的优势与实践指南
  • 【SpringMVC】详解cookie,session及实战
  • ping_test_parallel.sh 并行网络扫描脚本
  • (leetcode) 力扣100 7.接雨水(两种非官解,三种官解,对官解进一步解释)
  • QT实现曲线图缩放、拖拽以及框选放大
  • 【特别版】Kubernetes集群安装(1master,2node)
  • docker 安装 sqlserver2022 和注意点
  • 长事务:数据库中的“隐形炸弹“——金仓数据库运维避坑指南
  • P2415 集合求和 详解
  • 习近平同瑞典国王卡尔十六世·古斯塔夫就中瑞建交75周年互致贺电
  • 正荣地产:董事会主席、行政总裁辞任,拟投入更多精力推动境内债重组等工作
  • 东亚社会的“苦难诗学”:从《苦尽柑来遇见你》说起
  • 60岁济南石化设计院党总支书记、应急管理专家李有臣病逝
  • 公积金利率降至历史最低!多项房地产利好政策落地,购房者置业成本又降了
  • 机器人助力、入境游、演出引流:假期纳客千万人次城市有高招