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,一经查实,立即删除!

相关文章

手动实现promise的all,race,finally方法

Promise.all 是一个非常有用的工具&#xff0c;它接受一个 Promise 对象数组&#xff0c;并返回一个新的 Promise。当所有输入的 Promise 都成功解决时&#xff0c;新的 Promise 会解决为一个包含所有结果的数组&#xff1b;如果任何一个 Promise 被拒绝&#xff0c;新的 Prom…

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

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

搜维尔科技:Haption力触觉交互,虚拟机械装配验证

Haption力触觉交互&#xff0c;虚拟机械装配验证 搜维尔科技&#xff1a;Haption力触觉交互&#xff0c;虚拟机械装配验证

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

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

PostgreSQL 页损坏如何修复

PostgreSQL 错误&#xff1a;关系 base/46501/52712 中的块 480 存在无效的页。 当我们在使用 PostgreSQL 数据库的时候&#xff0c;如果服务器发生 CRASH 或者断电等异常情况的时候&#xff0c;有可能会遇到上面的这个报错信息。那么我们如何去修复这个数据呢&#xff0c;以及…

接口类和抽象类在设计模式中的一些应用

C设计模式中&#xff0c;有些模式需要使用接口类&#xff08;Interface Class&#xff09;和抽象类&#xff08;Abstract Class&#xff09;来实现特定的设计目标。以下是一些常见的设计模式及其需要的原因&#xff0c;并附上相应的代码片段。 1. 策略模式&#xff08;Strateg…

速盾:高防 CDN 的缓存机制是什么?

高防 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;的缓存机制是其保障网络安全和提升性能的关键所在。以下详细介绍高防 CDN 的缓存机制。 一、缓存内容的类型 &#xff08;一&#xff09;静态内容缓存 和普通 CDN 一样&#xff0c;高防 CD…

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…

《线程池(Thread Pool):高效多线程处理的核心机制》

在当今的软件开发领域&#xff0c;多线程编程已经成为提升程序性能和响应能力的关键技术。而线程池&#xff08;thread pool&#xff09;作为多线程处理中的一个重要概念&#xff0c;正发挥着不可或缺的作用。今天&#xff0c;我们就来深入探讨一下什么是线程池&#xff0c;以及…

第二节 OSI-物理层

三种数据传输形式&#xff1a; 第一代&#xff1a;电路交换&#xff1a;共同维护逻辑的一条链路-仅仅供两端设备之间访问&#xff0c;如果链路未释放&#xff0c;其他终端仍然无法使用链路 第二代&#xff1a;报文交换&#xff1a;在传输数据外面&#xff0c;添加发送者的信息…

一种基于深度学习的反无人机无人值守系统及方法

技术领域 本发明涉及光电技术领域,尤其涉及采用综合性技术防范无人机。 背景技术 近年来,“低小慢”等无人航空器迅猛发展,其“获取容易、使用隐蔽、升空突然、处置困难”的特点,易被敌对势力利用,造成失控肇事、干扰航管、窥视窃密、恐怖袭击、空防作战等危害,对党政军机…

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

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

基于迭代重加权最小二乘法的算法及例程

基于迭代重加权最小二乘法&#xff08;Iteratively Reweighted Least Squares&#xff0c;IRLS&#xff09;是一种用于解决具有异方差误差结构的最小二乘问题的迭代优化算法。 IRLS 算法的思想是通过迭代的方式&#xff0c;逐步调整权重并解决加权最小二乘问题&#xff0c;以得…

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…

vue 选项式|组合式 v2.x 是不支持的

1.查看vue 版本 在main.js 中 console.log("vue版本&#xff1a;"Vue.version); 如果你是单文件组件 &#xff08;.vue结尾且为vue3.X&#xff09; <script setup> // setup 是一个特殊的钩子&#xff0c;专门用于组合式 API。import { ref } from vue…