4.一元多项式相乘
题目说明:
要求采用链表形式,求两个一元多项式的乘积:h3 = h1*h2。函数原型为:void multiplication( NODE * h1, NODE * h2, NODE * h3 )。
输入:
输入数据为两行,分别表示两个一元多项式。每个一元多项式以指数递增的顺序输入多项式各项的系数(整数)、指数(整数)。
例如:1+2x+x2表示为:<1,0>,<2,1>,<1,2>,
输出:
以指数递增的顺序输出乘积: <系数,指数>,<系数,指数>,<系数,指数>,
零多项式的输出格式为:<0,0>,
说明:本题目有预设代码,只要提交你编写的函数即可。
预设代码
前置代码(含注释)
#include <stdio.h>
#include <stdlib.h>typedef struct node
{int coef, exp; // 多项式系数和指数struct node* next; // 指向下一个节点的指针
} NODE;void multiplication(NODE*, NODE*, NODE*);
void input(NODE*);
void output(NODE*);// 输入多项式函数
void input(NODE* head)
{int flag, sign, sum, x; // 用于临时存储解析出来的数字和符号char c; // 用于读取输入的字符NODE* p = head; // 初始化指针 p 指向头节点while ((c = getchar()) != '\n') // 从标准输入读入字符,直到遇到换行符为止{if (c == '<') // 遇到左尖括号,开始解析多项式项{sum = 0; // 初始化 sum 变量为 0,用于存储系数或指数sign = 1; // 初始化 sign 变量为 1,用于存储正负号flag = 1; // 初始化 flag 变量为 1,用于标识当前解析的是系数还是指数}else if (c == '-') // 遇到减号,表示下一个解析出来的数为负数sign = -1;else if (c >= '0' && c <= '9') // 如果当前字符是数字字符{sum = sum * 10 + c - '0'; // 将当前字符转换为数字并累加到 sum 变量中}else if (c == ',') // 遇到逗号,表示当前解析的是系数,接下来将解析指数{if (flag == 1) // 如果 flag 为 1,说明上一次解析的是系数{x = sign * sum; // 将系数乘以正负号保存到变量 x 中sum = 0; // 初始化 sum 变量为 0,用于存储下一个解析出来的指数flag = 2; // 将 flag 置为 2,表示接下来要解析指数sign = 1; // 初始化 sign 变量为 1,用于存储正负号}}else if (c == '>') // 遇到右尖括号,表示本次项的解析结束{NODE* newNode = (NODE*)malloc(sizeof(NODE)); // 创建新的节点newNode->coef = x; // 设置节点的系数为之前解析出来的值 xnewNode->exp = sign * sum; // 设置节点的指数为之前解析出来的值乘以正负号newNode->next = NULL; // 将节点的指针域指向 NULLp->next = newNode; // 将新节点插入到当前链表中p = p->next; // 将指针 p 移动到下一个节点sum = 0; // 初始化 sum 变量为 0,用于存储下一个解析出来的数sign = 1; // 初始化 sign 变量为 1,用于存储正负号flag = 0; // 将 flag 置为 0,表示下一次解析的将是系数}}
}// 输出多项式函数
void output(NODE* head)
{NODE* p = head->next;while (p != NULL){printf("<%d,%d>,", p->coef, p->exp);p = p->next;}printf("\n");
}int main()
{NODE* head1, * head2, * head3;head1 = (NODE*)malloc(sizeof(NODE));input(head1); // 输入多项式 h1head2 = (NODE*)malloc(sizeof(NODE));input(head2); // 输入多项式 h2head3 = (NODE*)malloc(sizeof(NODE));head3->next = NULL;multiplication(head1, head2, head3); // 计算 h1 和 h2 的乘积,并存储在 h3 中output(head3); // 输出乘积结果return 0;
}
提交代码 (含注释)
void multiplication(NODE* h1, NODE* h2, NODE* h3)
{NODE* p1 = h1->next, * p2 = h2->next, * p3;while (p1 != NULL){p3 = h3; // 初始化p3为h3的头节点while (p2 != NULL){// 乘法运算int coef = p1->coef * p2->coef;int exp = p1->exp + p2->exp;if (coef != 0) // 仅当乘积项的系数不为0时才进行插入操作{// 查找插入位置,使链表按指数升序排列while (p3->next != NULL && p3->next->exp < exp){p3 = p3->next;}if (p3->next != NULL && p3->next->exp == exp){// 指数相同,合并多项式项的系数p3->next->coef += coef;}else{// 指数不同,插入新节点NODE* newNode = (NODE*)malloc(sizeof(NODE));newNode->coef = coef;newNode->exp = exp;newNode->next = p3->next;p3->next = newNode;}}p2 = p2->next; // 内层循环迭代至下一项}p1 = p1->next; // 外层循环迭代至下一项p2 = h2->next; // 重置p2为h2的头节点}// 删除系数为0的多项式项p3 = h3;while (p3->next != NULL){if (p3->next->coef == 0){// 系数为0,删除节点NODE* temp = p3->next;p3->next = p3->next->next;free(temp);}else{p3 = p3->next;}}// 处理结果为空的情况,插入零多项式的节点if (h3->next == NULL){NODE* newNode = (NODE*)malloc(sizeof(NODE));newNode->coef = 0;newNode->exp = 0;newNode->next = NULL;h3->next = newNode;}
}相关文章:
4.一元多项式相乘
题目说明: 要求采用链表形式,求两个一元多项式的乘积:h3 h1*h2。函数原型为:void multiplication( NODE * h1, NODE * h2, NODE * h3 )。 输入: 输入数据为两行,分别表示两个一元多项式。每个一元多项式以…...
Android Gilde获取网络图片显示保存路径并转化为bitmap
为某个按钮或者图片添加点击事件,然后:strImg为图片url地址 ,loadDialog只是个提示信息,可以不要这个参数。使用Glide的onResourceReady方法获取到bitmap对象: LoadDialog loadDialognew LoadDialog(); loadDialog.initShow(cont…...
Uts阿里百川旗舰版插件UniApp-X
简介: 此插件为Uts插件,1.0版暂只支持安卓 插件地址:https://ext.dcloud.net.cn/plugin?id14771 接入阿里百川安卓旗舰版最新版5.0.1.9!支持淘宝授权登录,获取登录用户信息,拉起淘宝,打开商…...
一创聚宽的实盘就要关闭了,有没有好用的实盘平台推荐
挺多的,比较普遍的是QMT和Ptrade,python语言,易上手,通用性好,要说适用性可以考虑Ptrade,问一下你的客户经理有没有,用Ptrade的券商也多,如果之前用一创聚宽你可以无缝切换ÿ…...
全套办公软件Office 2019 mac专业版功能
Microsoft office 2019 Beta for Mac 是一款办公软件套装,它包含常用的办公应用程序,如 Word、Excel、PowerPoint 和 Outlook 等。office 2019 Beta 版本是一个测试版本,旨在让用户提前体验下一个版本的 office 套件,以便用户可以…...
【计算机网络】IP协议
目录 前言 IP协议 基本概念 IP协议格式 分片 16位标识 3位标志与13位片偏移 分片流程 网段划分 网络号和主机号 DHCP协议 CIDR划分方案 特殊的ip地址 ip地址数量限制 私有ip地址与公网ip地址 路由转发 前言 我们前面讲了HTTP/HTTPS协议和TCP/…...
【操作系统笔记九】并发安全问题
用户态抢占和内核态抢占 内核中可以执行以下几种程序: ① 当前运行的进程:陷阱程序(系统调用) 和 故障程序(page fault) ,进程运行在内核态的时候,其实就是在执行进程在用户态触发的…...
主要文库网站网赚分析
前言 躺赚的方式有很多,最常见的是文档网站。你上传文档后,等别人来下载,然后你就获得收益。这似乎比开直播,写专栏,赚粉丝更轻松,但实际调研发现,情况没那么简单,真正赚到钱的是少…...
“ElementUI实现动态树和动态表格的综合应用“
目录 引言1. ElementUI树1.1 树的基本概念1.2 示例代码和效果展示 2. ElementUI实现动态表格2.1 表格的基本概念2.2 示例代码和效果展示 总结 引言 在前端开发中,动态树和动态表格是常见的功能需求。ElementUI是一套基于Vue.js的组件库,提供了丰富的UI组…...
按键检测|中断检测
一.按键检测 1.硬件原理 当未按下按键时,GPIO_5为低电平,按下按键GPIO_5变为高电平。 根据引脚编号找到引脚名称 根据引脚名称找到引脚编号 裸机程序控制外设 特点:读数据手册、设寄存器值 找出外设有哪些相关寄存器找出外设相关寄存器如何…...
MySQL的执行流程
在聊mysql的执行流程之前,咱们要先聊聊mysql的逻辑架构。 逻辑架构 可以将上图简化为下图 连接层 客服端访问mysql服务器前,要先和mysq建立tcp连接。经过3次握手建立连接成功后,mysql服务器对tcp传输过来的账号密码进行身份认证&#x…...
如何办一份有价值的企业内刊/报纸?向《华为人》学习就够了
前两天有一个朋友联系华研荟,说他是今年大学毕业加入了一个中型公司,他学的是企业管理,在公司人力资源部门工作。上周老板说公司要办一份自己的内刊,这个工作由人力资源部负责,而人力资源经理就把这个活交给她了。 她…...
C++:从初识到初识的旅程
为什么文章是初识到初识呢,因为我真的仅仅是初识,大学只上了半个学期的C,其他的都是网络课程为主 在我踏入大学校门的那刻,我对于未来充满了无限的好奇和期待。其中,C这门神秘的编程语言进入了我的视线。虽然我的专业…...
JavaWeb 学习
1. 基本概念 1.1 Web web:网络,网页 静态 web html,css提供给所有人看的数据始终不会变化 动态 web 淘宝提供给每个人看的数据会有所不同技术栈:Servlet/JSP,ASP,PHP Java 中,动态 web 资…...
百度SEO优化不稳定的原因分析(提升网站排名的稳定性)
百度SEO优化不稳定介绍蘑菇号-www.mooogu.cn SEO不稳定是指网站在搜索引擎中的排名不稳定,随着时间的推移会发生变化。这种情况可能会出现在网站页面结构、内容质量、外链质量等方面存在缺陷或不合理之处。因此,优化SEO非常重要,可以提高网站…...
给你两个集合,要求{A} + {B}
先看题: 看完题后你会觉得:哇,好简单,STL一下就出来啦。 #include <iostream> #include <set>using namespace std;int main() {int n, m;while (cin >> n >> m) {set<int> set_a;for (int i 0;…...
Java获取实时摄像头进行拍照(附源码)
一、导言 1、引言 Java是一种通用编程语言,可以用来开发各种类型的应用程序,包括涉及图像处理和相机操作的应用程序。 要在Java中获取实时摄像头进行拍照,通常会借助一些第三方库或API,例如OpenCV(Open Source Compute…...
Kafka入门
1. Kafka简介 Apache Kafka 是LinkedIn公司开发的一款开源的高吞吐、分布式的消息队列系统,它具有高伸缩性、高可靠性和低延迟等特点,因此在大型数据处理场景中备受青睐。Kafka 可以处理多种类型的数据,如事件、日志、指标等,广泛…...
异地恋的甜蜜解药:李哥的群晖Videostation电影分享教程
异地恋的甜蜜解药:李哥的群晖Videostation电影分享教程 文章目录 异地恋的甜蜜解药:李哥的群晖Videostation电影分享教程1.使用环境要求2.制作视频分享链接3.制作永久固定视频分享链接 李哥和他的女朋友是一对甜蜜的情侣,但不幸的是ÿ…...
JSON数据获取指南!
在互联网时代,数据是金钱的来源。然而,要从海量的网页中提取需要的数据并不容易。本文将带你了解如何使用Node.js编写简易爬虫程序,帮助你轻松获取并处理JSON数据,让你不再为数据发愁。 一、准备工作 安装Node.js:确保…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
