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++ 代码实例:多项式除法简单计算工具。


参考资料

  • 无特定的参考资料

作者的话

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

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

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

相关文章

【蓝桥杯省赛真题41】Scratch电脑开关机 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch电脑开关机 一、题目要求 编程实现 二、案例分析 1、角色分析

【数据开发】大数据平台架构,Hive / THive介绍

1、大数据引擎 大数据引擎是用于处理大规模数据的软件系统&#xff0c; 常用的大数据引擎包括Hadoop、Spark、Hive、Pig、Flink、Storm等。 其中&#xff0c;Hive是一种基于Hadoop的数据仓库工具&#xff0c;可以将结构化的数据映射到Hadoop的分布式文件系统上&#xff0c;并提…

家用电脑做服务器,本地服务器搭建,公网IP申请,路由器改桥接模式,拨号上网

先浇一盆冷水&#xff01; 我不知道其他运营商是什么情况。联通的运营商公网IP端口 80、8080、443 都会被屏蔽掉&#xff0c;想要开放必须企业备案&#xff08;个人不行&#xff09;才可以。也就是说&#xff0c;只能通过其他端口进行showtime了。 需要哪些东西&#xff1f; 申…

MySQL中的刷脏机制详解

名词解释 脏页&#xff1a;当内存数据页跟磁盘数据页内容不一致的时候&#xff0c;我们称这个内存页为“脏页”。 干净页&#xff1a;内存数据写入到磁盘后&#xff0c;内存和磁盘上的数据页的内容就一致了&#xff0c;称为“干净页”。 LSN&#xff1a;称为日志的逻辑序列号(l…

HTB——introduction to active directory

文章目录 一、Active directory structure二、Active Directory Terminology 一、Active directory structure Active Directory &#xff08;AD&#xff09; 是用于 Windows 网络环境的目录服务。它是一种分布式分层结构&#xff0c;允许集中管理组织的资源&#xff0c;包括用…

MIPI-CSI-2 RAW10笔记

好文&#xff1a; 【精选】摄像头的MIPI接口、DVP接口和CSI接口-CSDN博客【精选】摄像头的MIPI接口、DVP接口和CSI接口-CSDN博客 (56 封私信 / 24 条消息) 显示器的 VGA、HDMI、DVI 和 DisplayPort 接口有什么区别&#xff1f; - 知乎 (zhihu.com) 嵌入式工程师必备&#x…

基于白鲸算法的无人机航迹规划-附代码

基于白鲸算法的无人机航迹规划 文章目录 基于白鲸算法的无人机航迹规划1.白鲸搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用白鲸算法来优化无人机航迹规划。 1.白鲸搜索算法 …

内核态内存映射

内核态的内存映射机制&#xff0c;主要包含以下几个部分&#xff1a; 内核态内存映射函数 vmalloc、kmap_atomic 是如何工作的&#xff1b;内核态页表是放在哪里的&#xff0c;如何工作的&#xff1f;swapper_pg_dir 是怎么回事&#xff1b;出现了内核态缺页异常应该怎么办&am…

什么是智慧工地?

智慧工地将更多人工智能、传感技术、虚拟现实等高科技技术植入到建筑、机械、人员穿戴设施、场地进出关口等各类物体中&#xff0c;并且被普遍互联&#xff0c;形成“物联网”&#xff0c;再与“互联网”整合在一起&#xff0c;实现工程管理干系人与工程施工现场的整合。智慧工…

火山引擎云原生存储加速实践

在火山引擎相关的业务中绝大部分的机器学习和数据湖的算力都运行在云原生 K8s 平台上。云原生架构下存算分离和弹性伸缩的计算场景&#xff0c;极大的推动了存储加速这个领域的发展&#xff0c;目前业界也衍生出了多种存储加速服务。但是面对计算和客户场景的多样性&#xff0c…

CSS 滚动捕获 Scroll Snap

CSS 滚动捕获 Scroll Snap CSS 滚动捕获允许开发者通过声明一些位置(或叫作捕获位置)来创建精准控制的滚动体验. 通常来说轮播图就是这种体验的例子, 在轮播图中, 用户只能停在图 A 或者图 B, 而不能停在 A 和 B 的中间. 比如平时用淘宝或小红书, 当你上滑到下一个推荐内容时…

wpf Grid布局详解 `Auto` 和 `*` 是两种常见的设置方式 行或列占多个单元格,有点像excel里的合并单元格。使其余的列平均分配剩余的空间

比如只有行的界面 <Window x:Class"GenerateTokenApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/exp…

YOLO目标检测——红绿灯检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;红绿灯检测数据集在自动驾驶、交通安全监控、智能交通系统、交通流量监测和驾驶员辅助系统等领域都有广泛应用的潜力数据集说明&#xff1a;红绿灯检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有国内红绿灯…

Zeus IoT : 基于 SpringBoot 的分布式开源物联网大数据平台

Zeus IoT 是一个集设备数据采集、存储、分析、观测为一体的开源物联网平台&#xff0c;全球首创基于 Zabbix 的物联网分布式数据采集架构&#xff0c;具备超百万级物联网设备的并发监控能力&#xff0c;真正具备工业级性能与稳定性的开源物联网大数据中台。 Zeus IoT 致力于让设…

快速实现一个企业级域名 SSL 证书有效期监控巡检系统

Why 现在对于企业来说&#xff0c;HTTPS 已经不是可选项&#xff0c;已经成为一个必选项。HTTPS 协议采用 SSL 协议&#xff0c;采用公开密钥的技术&#xff0c;提供了一套 TCP/IP 传输层数据加密的机制。SSL 证书是一种遵守 SSL 协议的服务器数字证书&#xff0c;一般是由权威…

Rust编程基础核心之所有权(下)

1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据&#xff0c;而不仅仅是栈上的数据&#xff0c;可以使用一个叫做 clone 的通用函数。 看下面的代码…

Mac苹果电脑分辨率修改管理 安装SwitchResX 完美解决

SwitchResX for Mac是一款Mac应用程序&#xff0c;可帮助您更好地管理和控制显示器分辨率和其他显示设置。使用SwitchResX&#xff0c;您可以创建自定义分辨率、旋转屏幕、调整显示器色彩配置等。 1. 自定义分辨率&#xff1a;SwitchResX允许用户创建自定义的屏幕分辨率&#…

VSCode设置中文语言界面(VScode设置其他语言界面)

一、下载中文插件 二、修改配置 1、使用快捷键 CtrlShiftP 显示出搜索框 2、然后输入 configure display language 3、点击 (中文简体) 需要修改的语言配置 三、重启 四、可能出现的问题 1、如果configure display language已经是中文配置&#xff0c;界面仍是英文 解决&a…

css进阶知识点速览

0前言 零基础部分的博客 1选择器进阶 1.1后代选择器 作用&#xff1a;根据html标签的嵌套关系&#xff0c;选择父元素后代中满足条件的元素 选择器语法&#xff1a;选择器1 选择器2 {css} 结果&#xff1a; 在选择器1所找到标签的后代中 注意&#xff1a; 后代包括&#xf…

python 视频硬字幕去除 内嵌字幕去除工具 vsr

项目简介 开源地址&#xff1a;https://github.com/YaoFANGUK/video-subtitle-remover Video-subtitle-remover (VSR) 是一款基于AI技术&#xff0c;将视频中的硬字幕去除的软件。 主要实现了以下功能&#xff1a; 无损分辨率将视频中的硬字幕去除&#xff0c;生成去除字幕后…