C/C++语言 多项式加法和乘法

多项式加法和乘法

  • 多项式的加法
    • 题目描述
    • 输入输出
    • 样例
    • 步骤
    • 代码段
      • 全局变量设定
      • 新建结点
      • 合并链表
    • 完整代码
  • 多项式乘法
    • 题目描述
    • 输入输出
    • 样例
    • 代码段
      • 计算两多项式结果
      • 输入
    • 完整代码

多项式的加法

题目描述

在这里插入图片描述

输入输出

在这里插入图片描述

样例

在这里插入图片描述

步骤

总体思想是用链表来做
① 我们发现输入样例中,系数和指数是分开输入的。也就是说,输入系数的时候,我们并不知道他对应的指数是多少。因此,我们先定义一个两个数组,一个放系数,一个放指数,然后转换为结点(用结构体,存放每一项的系数和指数),放进链表。

②输入第二个多项式的时候,要在合适的地方插入链表

  • 如果遍历到指数相同的节点,则指数相加,不建立新的节点
  • 如果遍历到第一个指数比自己大的节点,则插入到这个节点之前
  • 如果直接遍历到链表尾端了,那就插在最后

代码段

全局变量设定

typedef struct node{//存放系数和指数ll ind;ll exp;struct node* next;
}NODE;
NODE* head;//合并之后链表的头结点
int n,m;//多项式1和2的长度
ll ret;//记录系数非零的节点数目

注意一点,因为是多组数据输入,因此每一次都要确保全局变量ret清零

新建结点

NODE* createNode(ll i,ll e){NODE* newnode = (NODE*)malloc(sizeof(NODE));newnode->ind=i;newnode->exp=e;newnode->next=NULL;return newnode;
}

用于合并两个链表时使用

合并链表

合并两个有序链表是非常经典的链表算法,这里我传的参数并不是链表,但是也是用到了合并链表的思想

void merge(ll* ind1,ll*exp1,ll*ind2,ll*exp2){NODE* tail = head;int i1 =0;int i2=0;//i1和i2分别记录两个多项式的当前最后一位while(i1!=n&&i2!=m){if(exp1[i1]>exp2[i2]){NODE* new = createNode(ind2[i2],exp2[i2]);tail->next = new;i2++;}else if(exp1[i1]<exp2[i2]){NODE* new = createNode(ind1[i1],exp1[i1]);tail->next = new;i1++;}else{NODE* new = createNode(ind1[i1]+ind2[i2],exp1[i1]);tail->next = new;i1++;i2++;}tail=tail->next;ret++;}while(i1!=n){NODE* new = createNode(ind1[i1],exp1[i1]);tail->next = new;i1++;ret++;tail=tail->next;}while(i2!=m){NODE* new = createNode(ind2[i2],exp2[i2]);tail->next = new;i2++;ret++;tail=tail->next;}
}

完整代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<stdbool.h>
#include<time.h>
#include<limits.h>
typedef long long ll;
#define MAX_N 100005
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
typedef struct node{//存放系数和指数ll ind;ll exp;struct node* next;
}NODE;
NODE* head;
int n,m;
ll ret;//记录系数非零的节点数目
NODE* createNode(ll i,ll e){NODE* newnode = (NODE*)malloc(sizeof(NODE));newnode->ind=i;newnode->exp=e;newnode->next=NULL;return newnode;
}
void merge(ll* ind1,ll*exp1,ll*ind2,ll*exp2){NODE* tail = head;int i1 =0;int i2=0;//i1和i2分别记录两个多项式的当前最后一位while(i1!=n&&i2!=m){if(exp1[i1]>exp2[i2]){NODE* new = createNode(ind2[i2],exp2[i2]);tail->next = new;i2++;}else if(exp1[i1]<exp2[i2]){NODE* new = createNode(ind1[i1],exp1[i1]);tail->next = new;i1++;}else{NODE* new = createNode(ind1[i1]+ind2[i2],exp1[i1]);tail->next = new;i1++;i2++;}tail=tail->next;ret++;}while(i1!=n){NODE* new = createNode(ind1[i1],exp1[i1]);tail->next = new;i1++;ret++;tail=tail->next;}while(i2!=m){NODE* new = createNode(ind2[i2],exp2[i2]);tail->next = new;i2++;ret++;tail=tail->next;}
}
int main(){//初始化链表头结点,作为哑结点head  =(NODE*)malloc(sizeof(NODE));head->ind=head->exp=-1;head->next=NULL;int t;scanf("%d",&t);while(t--){ret=0;scanf("%d",&n);ll arr1_ind[n];//存放第一个多项式的系数for(int i=0;i<n;i++){scanf("%lld",&arr1_ind[i]);}ll arr1_exp[n];//存放第一个多项式的指数for(int i=0;i<n;i++){scanf("%lld",&arr1_exp[i]);}scanf("%d",&m);ll arr2_ind[m];//存放第二个多项式的系数for(int i=0;i<m;i++){scanf("%lld",&arr2_ind[i]);}ll arr2_exp[m];//存放第二个多项式的指数for(int i=0;i<m;i++){scanf("%lld",&arr2_exp[i]);}//合并两个多项式merge(arr1_ind,arr1_exp,arr2_ind,arr2_exp);//输出最后合并的结果printf("%lld\n",ret);NODE* cur = head->next;while(cur!=NULL){printf("%lld ",cur->ind);cur = cur->next;}printf("\n");cur = head->next;while(cur!=NULL){printf("%lld ",cur->exp);cur = cur->next;}printf("\n");}return 0;
}

多项式乘法

题目描述

在这里插入图片描述

输入输出

在这里插入图片描述

样例

在这里插入图片描述

代码段

计算两多项式结果

ll cal(ll base1,ll base2,ll* a,ll* b){ll ret1 = 0;ll x=1;for(int i=0;i<=n;i++){ret1=(ret1%MOD+x*a[i]%MOD)%MOD;x=(x*base1)%MOD;}ll ret2 = 0;x=1;for(int i=0;i<=m;i++){ret2=(ret2%MOD+x*b[i]%MOD)%MOD;x=(x*base2)%MOD;}return (ret1*ret2)%MOD;
}

注意取模的规则

输入

cin>>n;ll a[n+1];//注意要多开辟一个空间for(int i=0;i<=n;i++){cin>>a[i];}cin>>m;ll b[m+1];for(int i=0;i<=m;i++){cin>>b[i];}

两个系数数组都要记得多开辟一个空间,因为n和m代表最高次数,1-n次再加上一个0次,一共需要n+1个空间

完整代码

#include <iostream>
using namespace std;
#define MOD 10007
typedef long long ll;
int n,m,q;
ll cal(ll base1,ll base2,ll* a,ll* b){ll ret1 = 0;ll x=1;for(int i=0;i<=n;i++){ret1=(ret1%MOD+x*a[i]%MOD)%MOD;x=(x*base1)%MOD;}ll ret2 = 0;x=1;for(int i=0;i<=m;i++){ret2=(ret2%MOD+x*b[i]%MOD)%MOD;x=(x*base2)%MOD;}return (ret1*ret2)%MOD;
}
int main(){cin>>n;ll a[n+1];for(int i=0;i<=n;i++){cin>>a[i];}cin>>m;ll b[m+1];for(int i=0;i<=m;i++){cin>>b[i];}cin>>q;for(int i=0;i<q;i++){ll base1,base2;cin>>base1>>base2;cout<<cal(base1,base2,a,b)<<endl;}
}

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

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

相关文章

第十四章 Spring之假如让你来写AOP——雏形篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

微信小程序——实现二维码扫描功能(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

linux rocky 9.4部署和管理docker harbor私有源

文章目录 Harbor简介安装Harbor技术细节1.安装系统(略),设置主机名和IP2.安装docker3.安装docker-compose4.安装Harbor私有源仓库5 测试登录1.本机登录2.客户端登录Harbor服务器配置docker源1. 下载镜像2.把镜像上传到Harbor私有仓库源3.客户端下载镜像,并且启动容器linux …

【Elasticsearch入门到落地】1、初识Elasticsearch

一、什么是Elasticsearch Elasticsearch&#xff08;简称ES&#xff09;是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。它使用Java编写&#xff0c;基于Apache Lucene来构建索引和提供搜索功能&#xff0c;是一个分布式、可扩展、近实…

【算法一周目】双指针(2)

目录 有效三角形的个数 解题思路 C代码实现 和为s的两个数字 解题思路 C代码实现 三数之和 解题思路 C代码实现 四数之和 解题思路 C代码实现 有效三角形的个数 题目链接&#xff1a;611. 有效三角形的个数题目描述&#xff1a;给定一个包含非负整数的数组nums&…

单体架构 IM 系统之 Server 节点状态化分析

基于 http 短轮询模式的单体架构的 IM 系统见下图&#xff0c;即客户端通过 http 周期性地轮询访问 server 实现消息的即时通讯&#xff0c;也就是我们前面提到的 “信箱模型”。“信箱模型” 虽然实现非常容易&#xff0c;但是消息的实时性不高。 我们在上一篇文章&#xff08…

让AI为你发声!Windows电脑快速部署ChatTTS文本转语音神器

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 嘿&#xff0c;朋友们&#xff01;今天我们来聊聊如何在Windows系统上快速搭建ChatTTS&#xff0c;一个超酷的开源文本转语音项目。更棒的是&#xff0c;我们还可以用Cp…

RSTP的配置

RSTP相对于STP在端口角色、端口状态、配置BPDU格式、配置BPDU的处理方式、快速收敛机制、拓扑变更机制和4种保护特性方面的详细改进说明&#xff1a; 端口角色&#xff1a; STP中定义了三种端口角色&#xff1a;根端口&#xff08;Root Port&#xff09;、指定端口&#xff0…

elementui el-table中给表头 el-table-column 加一个鼠标移入提示说明

前言 在使用el-table 表格中有些表格的表头需要加入一些提示&#xff0c;鼠标移入则出现提示&#xff0c;非常实用&#xff0c;我是通过el-table中的el-tooltip实现的&#xff0c;以下的效果预览 代码实现 <el-table ref"multipleTable" :data"data"…

ubuntu18.04 安装与卸载NCCL conda环境安装PaddlePaddle

cuda版本11.2 说明PaddlePaddle需要安装NCCL 1、Log in | NVIDIA Developer 登录官网 找到对应版本 官方提供了多种安装方式&#xff0c;本文使用Local installers (x86)本地安装 点击对应的版本下载如&#xff1a; nccl-local-repo-ubuntu1804-2.8.4-cuda11.2_1.0-1_amd6…

机器学习—决定下一步做什么

现在已经看到了很多不同的学习算法&#xff0c;包括线性回归、逻辑回归甚至深度学习或神经网络。 关于如何构建机器学习系统的一些建议 假设你已经实现了正则化线性回归来预测房价&#xff0c;所以你有通常的学习算法的成本函数平方误差加上这个正则化项&#xff0c;但是如果…

【Rust中的项目管理】

Rust中的项目管理 前言Package&#xff0c;Crate&#xff0c;Module &use &#xff0c;Path通过代码示例解释 Crate&#xff0c;Module &#xff0c;use&#xff0c;Path创建一个package&#xff1a;代码组织化skin.rs 中的代码struct & enum 相对路径和绝对路径引用同…

labview用sql server数据库存取数据到一个单元格

最近有一个项目上需要一个庞大的数据量&#xff0c;需要很多列&#xff0c;但是百度查了一下sqi server最多支持1024列&#xff0c;这一限制适用于大多数表类型&#xff0c;包括常规表&#xff0c;临时表和表变量&#xff0c;要注意的是如果超出这一限制可能会导致数据的完整性…

架构篇(04理解架构的演进)

目录 学习前言 一、架构演进 1. 初始阶段的网站架构 2. 应用服务和数据服务分离 3. 使用缓存改善网站性能 4. 使用应用服务器集群改善网站的并发处理能力 5. 数据库读写分离 6. 使用反向代理和CDN加上网站相应 7. 使用分布式文件系统和分布式数据库系统 8. 使用NoSQL和…

Unity学习笔记(4):人物和基本组件

文章目录 前言开发环境新增角色添加组件RigidBody 2D全局项目设置Edit 给地图添加碰撞体 总结 前言 今天不加班&#xff0c;有空闲时间。争取一天学一课&#xff0c;养成习惯 开发环境 Unity 6windows 11vs studio 2022Unity2022.2 最新教程《勇士传说》入门到进阶&#xff…

Java项目实战II基于Spring Boot的高校教师电子名片系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在信息化教育日益普及的今天&#xff0…

数学几百年重大错误:将无穷多各异直线误为直线y=x

黄小宁 h定理&#xff1a;点集AB≌B的必要条件是A≌B。 证&#xff1a;若AB则A必可恒等变换地变为BA≌A&#xff0c;而恒等变换是保距变换。证毕。 直线Z&#xff1a;x-y0&#xff08;x的变域是x轴&#xff09;可放大&#xff08;拉伸&#xff09;变换为直线L&#xff08;不≌Z…

学习threejs,使用第一视角控制器FirstPersonControls控制相机

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️第一视角控制器FirstPerson…

LabVIEW导入并显示CAD DXF文件图形 程序见附件

LabVIEW导入并显示CAD DXF文件图形 程序见附件 LabVIEW导入并显示CAD DXF文件图形 程序见附件 - 北京瀚文网星科技有限公司 LabVIEW广泛应用于自动化、数据采集、图形显示等领域。对于涉及CAD图形的应用&#xff0c;LabVIEW也提供了一些方法来导入和显示CAD DXF文件&#x…

数据结构---详解栈

一、栈的概念和结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&a…