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;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数论

费马小定理 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1 \pmod p ap−1≡1(modp) 其中 p p p 为质数。 欧拉定理 欧拉函数 φ ( i ) \varphi (i) φ(i)&#xff1a; 1 1 1 到 i i i 中与 i i i 互质的个数。 a φ ( a ) ≡ 1 ( m o d p ) a^{\varphi(a)} \equiv 1 \pmod…

ChatGPT推出全新功能,引发人工智能合成声音担忧|百能云芯

人工智能AI科技企业OpenAI公司25日宣布&#xff0c;其聊天应用程序ChatGPT如今具备「看、听、说」能力&#xff0c;至少能够理解口语、用合成语音回应并且处理图像&#xff1b;但专家忧心&#xff0c;以假乱真与深度伪造的乱象可能变本加厉。 国家广播公司新闻网(NBC News)报导…

全新UI基于Thinkphp的最新自助打印系统/云打印小程序源码/附教程

这是一款全新的基于Thinkphp的最新自助打印系统&#xff0c;最新UI界面设计的云打印小程序源码&#xff0c;带有简单的教程。 下载地址&#xff1a;https://bbs.csdn.net/topics/617324130

简述ceph文件储存系统

Ceph 是一个统一的分布式存储系统和共享机制&#xff0c;它定义了数据如何存储在一个或多个节点上并呈现给其他机器以供文件访问。 Ceph特点 高性能 a. 摒弃了传统的集中式存储元数据寻址的方案&#xff0c;采用CRUSH算法&#xff0c;数据分布均衡&#xff0c;并行度高。 b.考…

WSL2编译安卓11源码,,刷入pixel设备,并使用asfp查看源码

目录 WSL2编译安卓11源码,&#xff0c;刷入pixel设备源码下载驱动下载编译刷机源码导入Android Studio for platformADB调试 WSL2编译安卓11源码,&#xff0c;刷入pixel设备 aosp编译完成后&#xff0c;刷入手机其实非常简单&#xff0c;但是使用wsl有一个问题&#xff0c;就是…

crypto:变异凯撒

题目 下载题目所给的压缩包后解压得到文本提示 由题目名可知为凯撒密码 根据提示格式为flag{}&#xff0c;所以猜测前四个字符原文为flag 先来推测一下偏移量 a->f 偏移量为-5&#xff0c;按道理来说每个字符的偏移量都是一样的&#xff0c;但是对照过后发现后面的字符对…

cuda文档链接

tensorrt tensorrt docker release note tensorrt下载页 英伟达官方容器仓库&#xff0c;包括triton&#xff0c;tensorrt&#xff0c;tensorflow等 cuda CUDA C Best Practices Guide GPU Compute Capability Frameworks Support Matrix triton triton docker relea…

Java面向对象高级

文章目录 面向对象高级Object类的常用方法常用方法一&#xff08;面向对象阶段&#xff09;** 和 equals 的区别** 关键字native**单例设计模式&#xff08;Singleton&#xff09;**前情回顾&#xff08;学习基础&#xff09;静态修饰符Static设计模式概念开发步骤**两种实现方…

springboot集成quartz并实现定时任务管理

依赖&#xff1a; <quartz.version>2.3.0</quartz.version><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>${quartz.version}</version><exclusions><exclus…

“的修“报修工单管理系统有哪些功能和作用?

“的修"报修工单管理系统是基于微信平台的&#xff0c;无需下载和安装&#xff0c;只需扫码即可使用。它是一个维保过程管控的理想解决方案&#xff0c;适用于企业、学校、医院、物业等单位需要设备维保的场景。“的修"报修小程序具有独立部署和可控的数据安全性&…

手把手教你实现:将后端SpringBoot项目部署到华为云服务器上

前言 前提&#xff1a;有一个后端项目&#xff0c;项目能够运行在本地&#xff0c;可以通过本地访问&#xff08;localhost&#xff09; 如果没有可以看这篇&#xff1a;一个基于SpringBoot的后端项目 注册华为云账号 华为云官网 购买云服务器 产品 -> 华为云耀云服务器…

【数据结构-树】哈夫曼树

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

图片编辑小程序源码/拼图小程序源码

图片编辑小程序源码&#xff0c;拼图小程序源码。全能、便捷的图片编辑工具。实现了图片裁剪、添加文字、涂鸦、拼长图、拼相框等图片编辑功能&#xff0c;另外还有一个简易的表情包制作功能。 主要有以下几个功能&#xff1a;图片裁剪、添加文字、涂鸦功能、拼长图、拼相框、表…

mybati缓存了解

title: “mybati缓存了解” createTime: 2021-12-08T12:19:5708:00 updateTime: 2021-12-08T12:19:5708:00 draft: false author: “ggball” tags: [“mybatis”] categories: [“java”] description: “mybati缓存了解” mybatis的缓存 首先来看下mybatis对缓存的规范&…

[DeepSpeed]RuntimeError: output tensor must have the same type as input tensor

最近在跑chatglm2的sft的时候出现了下面的错误&#xff0c;我的运行方式是bf16, deepspeed zero3&#xff0c;因为担心fp16会有很多的nan. File "/home/suser/.conda/envs/llm/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1538, in _call_implr…

Ingress Controller

什么是 Ingress Controller &#xff1f; 在云原生生态中&#xff0c;通常来讲&#xff0c;入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件&#xff0c;用于管理入口资源对象。 Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则&#xff0c;以控制进…

el-image 和 el-table冲突层级冲突问题

其中原理&#xff0c;很多博客已经所过了&#xff0c;table组件中使用图片&#xff0c;会出现层级过低问题&#xff0c; 网上大部分解决方式是 使用穿透 // 单元格样式 ::v-deep(.el-table__cell) {position: static !important; }我在此不推荐这种解决方式&#xff0c;原因&a…

Leetcode228. 汇总区间

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属…

大数据之Hive(二)

一、Hive的查询DQL 1. 查询的语法 关键字作用distinct如果有多个字段&#xff0c;根据组合进行去重all默认情况就是查询所有&#xff0c;可以省略select 1 from table相当于给表增加了一列where分组前过滤having分组后过滤order by全局有序&#xff0c;按照关键字去重分组,re…

二、VXLAN BGP EVPN基本原理

VXLAN BGP EVPN基本原理 1、BGP EVPN2、BGP EVPN路由2.1、Type2路由——MAC/IP路由2.2、Type3路由——Inclusive Multicast路由2.3、Type5路由——Inclusive Multicast路由 ————————————————————————————————————————————————…