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

C++ 代码实例:多项式除法简单计算工具

文章目录

  • 前言
  • 代码仓库
  • 代码
    • 说明
    • 核心片段
  • 结果
  • 总结
  • 参考资料
  • 作者的话

前言

C++ 代码实例:多项式除法简单计算工具。


代码仓库

  • yezhening/Programming-examples: 编程实例 (github.com)
  • Programming-examples: 编程实例 (gitee.com)

代码

说明

  • 由于代码篇幅较多,在博客中直接粘贴并呈现会显得冗长,因此未在博客中放置完整代码,只展示核心片段代码。请前往"代码仓库"查看或获取相关代码
  • 简单地计算多项式除法
  • 注释有详细的步骤解析
  • 好用的多项式除法在线计算网址:在线计算器: 多项式除法 (planetcalc.com)
  • 多项式除法,被除数和除数写在程序中:main.exe、main.cpp、polynomial.cpp、polynomial.h
  • 多项式除法,在终端输入被除数和除数:main1.exe、main1.cpp、polynomial.cpp、polynomial.h

注:一个晚上一个早上完成,应该大部分结果对,若出现小部分结果错误懒得管了,逻辑差不多那样


核心片段

polynomial.h

#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H#include <vector>
#include <iostream>using std::ostream;
using std::vector;// 多项式类
class Polynomial
{
public:explicit Polynomial(const vector<int> &p) : poly_vec(p) {} // 私有成员只能在类的成员函数内部被初始化// 重载运算符 “<<” 输出多项式// friend:类外会用该运算符访问类的成员,不写报错:too many parameters for this operator function// 返回输出流对象引用,可以链式操作friend ostream &operator<<(ostream &output, const Polynomial &obj);// 重载运算符 “/” 进行多项式除法// 返回值:商// 参数:除数Polynomial operator/(const Polynomial &divisor) const; // const表示不会改变调用该方法的被除数// 重载运算符 “%” 进行多项式除法求余// 返回值:余数// 参数:除数// 照搬除法逻辑,只改动最后return的返回值,最后的余数就是最后更新的被除数Polynomial operator%(const Polynomial &divisor) const; // const表示不会改变调用该方法的被除数private:const vector<int> poly_vec; // 多项式的向量表示
};#endif // POLYNOMIAL_H

polynomial.cpp

// 重载运算符 “<<” 输出多项式
// 不需要friend、类作用域声名,因为是类外的运算符
ostream &operator<<(ostream &output, const Polynomial &obj)
{UINT terminal_code_page = GetConsoleOutputCP(); // 获取当前终端的输出代码页if (terminal_code_page != 65001){system("chcp 65001"); // 终端切换使用utf8字符集显示,以可以显示utf8的上标// 注意:会切换终端页,需要重新运行程序}else // 65001{}for (int i = obj.poly_vec.size() - 1; i >= 0; --i) // 从高位到低位    i既表示索引也表示次数{// 1. 系数的符号// 正数显示+,负数不显示-,系数负数已有-if (obj.poly_vec.at(i) >= 0){cout << "+";}else // obj.poly.at(i) < 0{// cout << " - ";}// 2. 系数cout << obj.poly_vec.at(i);// 3. 形式参数cout << "x";// 4. 次数// 上标号的utf8编码// 如:0上标号⁰的utf8编码在索引0为\u2070,1上标号¹的utf8编码在索引1为\u00B9,以此类推vector<string> superscript_utf8{"\u2070", "\u00B9", "\u00B2", "\u00B3", "\u2074", "\u2075", "\u2076", "\u2077", "\u2078", "\u2079"};cout << superscript_utf8.at(i);}return output;
}// 重载运算符 “/” 进行多项式除法
// 返回值:商
// 参数:除数
Polynomial Polynomial::operator/(const Polynomial &divisor) const // const表示不会改变调用该方法的被除数
{// 1. 准备被除数、除数和商// 解封装,获取被除数和除数向量// 1.1 方便操作// 1.2 不再是const,可以修改再封装出去vector<int> dividend_vec(this->poly_vec);  // 被除数vector<int> divisor_vec(divisor.poly_vec); // 除数// 商初始的次数是被除数最高项次数 - 除数最高项次数 + 1// 如:// 4x³ + 3x² + 2x + 1,的个数是4,最高项次数次数是 4 - 1 = 3// x² + 2x + 1的个数是3,最高项次数次数是 3 - 1 = 2// 最高项相除,4x³ / x² = 4x,商的最高项次数是 3 - 2 = 1// 因为索引从0开始,所以需要+1,商系数的个数是1 + 1 = 2,初始化为0vector<int> quotient_vec((dividend_vec.size() - 1) - (divisor_vec.size() - 1) + 1, 0); // 商// 2. 除法运算// 2.1 如果被除数最高项次数 < 除数最高项次数,即 dividend_vec.size() - 1 < divisor_vec.size() - 1,商返回0// 如:4x³ + 3x² + 2x + 1 / x⁵ + 2x + 3,被除数最高项 4x³ 次数4 < 除数最高项 x⁵ 次数5,无法除,返回0(只有1个元素,索引0值0)if ((dividend_vec.size() - 1) < (divisor_vec.size() - 1)){quotient_vec.resize(1, 0);}// ...
}// 重载运算符 “%” 进行多项式除法求余
// 返回值:余数
// 参数:除数
// 照搬除法逻辑,只改动最后return的返回值,最后的余数就是最后更新的被除数
Polynomial Polynomial::operator%(const Polynomial &divisor) const // const表示不会改变调用该方法的被除数
{// ...
}

main.cpp

#include "polynomial.h"using std::cout;
using std::endl;int main()
{// int 型向量表示多项式,x作为形式参数无具体意义只有方便理解的展示意义,索引表示次数,值表示系数// 如 {1, 2},索引0值1表示1x⁰,索引1值2表示2x¹,所以多项式是:2x¹ + 1x⁰ = 2x + 1const vector<int> dividend_vec{1, 2, 3, 4}; // 被除数,4x³ + 3x² + 2x + 1const vector<int> divisor_vec{3,2,1};        // 除数,x² + 2x + 3// 多项式类表示多项式,进一步封装const Polynomial dividend(dividend_vec);const Polynomial divisor(divisor_vec);cout << "被除数: " << dividend << endl;cout << "除数: " << divisor << endl;// 多项式除法求商Polynomial quotient = dividend / divisor;cout << "商: " << quotient << endl;// 多项式除法求余数Polynomial remainder = dividend % divisor;cout << "余数: " << remainder << endl;return 0;
}

main1.cpp

#include <sstream> // istringstream#include "polynomial.h"using std::cin;
using std::cout;
using std::endl;
using std::getline;
using std::istringstream;
using std::string;int main()
{// 终端输入被除数和除数// int 型向量表示多项式,x作为形式参数无具体意义只有方便理解的展示意义,索引表示次数,值表示系数//{1, 2},索引0值1表示1x⁰,索引1值2表示2x¹,所以多项式是:2x¹ + 1x⁰ = 2x + 1// 1. 被除数vector<int> dividend_vec(0);cout << "被除数系数,从高到低位输入,空格分隔,回车结束: " << endl;string input("");getline(cin, input); // 从终端获取一行输入istringstream iss(input); // 字符串 -> 输入流对象int num(0);while (iss >> num) // 输入流对象 -> 数字{dividend_vec.insert(dividend_vec.begin(), num); // 从后往前插入}// 2. 除数vector<int> divisor_vec(0);cout << "除数系数,从高到低位输入,空格分隔,回车结束: " << endl;input = "";getline(cin, input);iss.clear(); // 清楚流状态,否则获取不到数字iss.str(input);num = 0;while (iss >> num){divisor_vec.insert(divisor_vec.begin(), num);}// 多项式类表示多项式,进一步封装const Polynomial dividend(dividend_vec);const Polynomial divisor(divisor_vec);cout << "被除数: " << dividend << endl;cout << "除数: " << divisor << endl;// 多项式除法求商Polynomial quotient = dividend / divisor;cout << "商: " << quotient << endl;// 多项式除法求余数Polynomial remainder = dividend % divisor;cout << "余数: " << remainder << endl;return 0;
}

Makefile

.PHONY : all
all : main.exe main1.exemain.exe : main.cpp polynomial.cppg++ -o $@ $^main1.exe : main1.cpp polynomial.cppg++ -o $@ $^.PHONY : clean
clean :del *.exe

结果

在这里插入图片描述


总结

C++ 代码实例:多项式除法简单计算工具。


参考资料

  • 无特定的参考资料

作者的话

  • 感谢参考资料的作者/博主
  • 作者:夜悊
  • 版权所有,转载请注明出处,谢谢~
  • 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
  • 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
  • 文章在认识上有错误的地方, 敬请批评指正
  • 望读者们都能有所收获

相关文章:

C++ 代码实例:多项式除法简单计算工具

文章目录 前言代码仓库代码说明核心片段 结果总结参考资料作者的话 前言 C 代码实例&#xff1a;多项式除法简单计算工具。 代码仓库 yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) 代码 说明 由于代码篇幅较多&#…...

MySql表自修改报错:You can‘t specify target table ‘student‘ for update in FROM clause

文章目录 一、发现问题二、场景1&#xff1a;在where条件中查询了修改表的数据三、场景2&#xff1a;在set语句中查询了修改表的数据 一、发现问题 在一次准备处理历史数据sql时&#xff0c;出现这么一个问题&#xff1a;You cant specify target table 表名 for update in FR…...

LeetCode 热题100——链表专题

一、俩数相加 2.俩数相加&#xff08;题目链接&#xff09; 思路&#xff1a;这题题目首先要看懂&#xff0c;以示例1为例 即 342465807&#xff0c;而产生的新链表为7->0->8. 可以看成简单的从左向右&#xff0c;低位到高位的加法运算&#xff0c;4610&#xff0c;逢…...

植物花粉深度学习图片数据集大合集

最近收集了一波有关于植物花粉的图片数据集&#xff0c;可以用于相关深度学习模型的搭建&#xff0c;废话不多说&#xff0c;上数据集&#xff01;&#xff01;&#xff01; 1、23种花粉类型805张花粉图像数据集 关于此数据&#xff1a;花粉种类和类型的分类是法医抱粉学、考…...

面试算法48:序列化和反序列化二叉树

题目 请设计一个算法将二叉树序列化成一个字符串&#xff0c;并能将该字符串反序列化出原来二叉树的算法。 分析 先考虑如何将二叉树序列化为一个字符串。需要逐个遍历二叉树的每个节点&#xff0c;每遍历到一个节点就将节点的值序列化到字符串中。以前序遍历的顺序遍历二叉…...

【Python基础】Python编程入门自学笔记,基础大全,一篇到底!

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

windows自动登陆

新建文本粘贴下面代码&#xff0c;另存为注册表文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Driver Signing] "Policy"hex:00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"DefaultUserN…...

5G及其后的5G非地面网络:趋势和研究挑战-HARQ部分

NTN组件纳入5G架构第一步 在NTN SI中定义了一组架构选项。就NT部分而言&#xff0c;已确定了两大类&#xff1a;星载&#xff08;即基于卫星的通信平台&#xff09;和机载&#xff08;即HAPS&#xff09;设备 并行管理HARQ最大进程数 NHARQRTT(NTX−1)2μ NTX&#xff1a;传输…...

【WPF系列】- XAML语法规范

【WPF系列】- XAML语法规范 文章目录 【WPF系列】- XAML语法规范一、概述二、对象元素语法三、特性语法&#xff08;属性&#xff09;四、特性值的处理五、枚举特性值六、属性和事件成员名称引用七、属性元素语法八、集合语法九、XAML 内容属性XAML 内容属性值必须是连续的 十、…...

antv/g6之图布局及切换布局

一般图布局 目前为止&#xff0c;g6的一般图布局已经有13种了&#xff0c;如下: Random Layout&#xff1a;随机布局&#xff1b;Force2 Layout&#xff1a;G6 4.7.0 后支持力导向布局&#xff0c;与 gForce 相比性能更强&#xff1b;GForce Layout&#xff1a;G6 4.0 支持的…...

Wordpress plugin removes ‘/category‘

plugin removes /category from your category permalinks Remove Category URL – WordPress plugin | WordPress.org...

【大数据基础平台】星环TDH社区集群版本部署

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f…...

【Java】汉诺塔

汉诺塔 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff08;河内塔&#xff09;&#xff1a;把圆盘从下面开始按大小顺序重新摆放到另一根柱子上&#xff0c;并且小圆盘上不能放大圆盘&#xff0c;在三根柱子之间一次只能移动一个圆盘。 汉诺塔规则 disk表示圆盘数一次只…...

Java实现对Html文本的处理

1.引入jsoup <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.8.3</version> </dependency> 2. html示例 示例代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1…...

Vue项目创建与启动(2023超详细的图文教程)

目录 一、下载node.js 二、下载vue-cli与webpack插件 三、项目初始化(项目配置详细信息) 四、项目启动 五、Vue项目工程结构&#xff08;扩展知识&#xff09; 一、下载node.js 1.检测是否已经安装过node.js 打开控制台,输入 npm -v如果有会显示对应版本 如果没有会显示…...

EtherCAT主站读取从站EEPROM抓包分析

0 工具准备 1.EtherCAT主站 2.EtherCAT从站&#xff08;本文使用步进电机驱动器&#xff09; 3.Wireshark1 抓包分析 1.1 报文总览 本文让主站去读取从站1字地址为0的EEPROM数据内容&#xff0c;主站读取从站EEPROM数据内容使用Wireshark抓包如下&#xff1a; 1.2 EEPROM读…...

Elasticsearch 8.X 如何生成 TB 级的测试数据 ?

1、实战问题 我只想插入大量的测试数据&#xff0c;不是想测试性能&#xff0c;有没有自动办法生成TB级别的测试数据&#xff1f;有工具&#xff1f;还是说有测试数据集之类的东西&#xff1f;——问题来源于 Elasticsearch 中文社区https://elasticsearch.cn/question/13129 2…...

汽车标定技术(四)--问题分析:多周期测量时上位机显示异常

目录 1.问题现象 2.数据流分析 ​​​​3.代码分析 3.1 AllocDAQ 3.2 AllocOdt 3.3 AllocOdtEntry 4.根因分析及解决方法 4.1 根因分析 4.2 解决方案 1.问题现象 在手撸XCP代码时&#xff0c; DAQ的实现是一大头痛的事情。最初单周期实现还好一点&#xff0c;特别是…...

Flink SQL时间属性和窗口介绍

&#xff08;1&#xff09;概述 时间属性&#xff08;time attributes&#xff09;&#xff0c;其实就是每个表模式结构&#xff08;schema&#xff09;的一部分。它可以在创建表的 DDL 里直接定义为一个字段&#xff0c;也可以在 DataStream 转换成表时定义。 一旦定义了时间…...

Tomcat免安装版修改标题名称和进程

tomcat免安装版启动后闪退问题 问题描述 在官网下载的tomcat免安装版的你安装完环境后发现启动闪退&#xff0c;tomcat启动依赖环境是JDK&#xff0c;所以需要tomcat对应版本的JDK支持。 tomcat8官网下载地址&#xff1a;https://tomcat.apache.org/ JDK环境官网下载地址&…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...

未授权访问事件频发,我们应当如何应对?

在当下&#xff0c;数据已成为企业和组织的核心资产&#xff0c;是推动业务发展、决策制定以及创新的关键驱动力。然而&#xff0c;未授权访问这一隐匿的安全威胁&#xff0c;正如同高悬的达摩克利斯之剑&#xff0c;时刻威胁着数据的安全&#xff0c;一旦触发&#xff0c;便可…...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...