基本要求:
(1)输入并建立多项式,并用友好的界面显示多项式,如,
8x 3 -6x 2 +8 显示为 8x^3-6x^2+8 ;
(2)计算两个多项式的加法和减法;
(3)给定 x ,计算多项式在 x 处的值。

题目不难,但有几个需要注意一点的地方:

1.当用户输入或者计算出来的多项式中某一项系数为0不用输出

2.系数为1或者-1的时候,1是不需要展现在x前面

3.正数在第一个数的时候不能有+

(前面两个图已经表示出来了。)


然后下面就是实现的代码供参考

首先class一个类,私有数据为保存指数的值,一个指针用来表示动态数组(也就是存放多项式系数的地方),x的具体值,以及最后x带入计算的结果

公共部分主要就是重载一下加法和减法,一个展示结果输出的类方法

#include<iostream>
#include<numeric>
#include<limits>
#include<cstdlib>
class Poly
{
public:Poly(unsigned long long _index);Poly(unsigned long long _index,double _point);~Poly(void);friend Poly operator+(const Poly& r1, const Poly& r2);friend Poly operator-(const Poly& r1, const Poly& r2);void showexpression(void)const;bool getarray(void);void getpointans(void);private://这两个字符是输出给用户看x多少次方char m_showtouser_character1;char m_showtouser_character2;//x的具体值double m_point;//最高指数unsigned long long m_index;//保存系数的数组double* m_indexarray;//计算所得结果double m_ans;
};
Poly::Poly(unsigned long long _index)
{m_showtouser_character1 = 'x';m_showtouser_character2 = '^';m_indexarray = new double[_index + 1];m_index = _index;m_point = 0;m_ans = 0;
}
Poly::Poly(unsigned long long _index,double _point)
{m_showtouser_character1 = 'x'; m_showtouser_character2 = '^';m_indexarray = new double[_index+1];m_index = _index;m_point = _point;m_ans = 0;
}Poly::~Poly(void)
{
}
//这个show我实在是没办法,太长了
void Poly::showexpression(void) const
{unsigned long long tempindex = m_index, checkforindexarrayiszero = 0;//排除特殊的三种情况if (m_indexarray[0] == 1 || m_indexarray[0] ==-1 || m_indexarray[0]== 0){if (m_indexarray[0] == -1){if (m_index == 1)std::cout << '-'<<m_showtouser_character1;elsestd::cout << '-' << m_showtouser_character1 << m_showtouser_character2 << tempindex;}if (m_indexarray[0] == 1){if (m_index == 1)std::cout << m_showtouser_character1;elsestd::cout << m_showtouser_character1 << m_showtouser_character2 << tempindex;}if (m_indexarray[0] == 0)checkforindexarrayiszero = 1;}else{if (m_index != 1)std::cout << m_indexarray[0] << m_showtouser_character1 << m_showtouser_character2 << tempindex;elsestd::cout << m_indexarray[0] << m_showtouser_character1;}tempindex--;for (int i = 1; i < m_index-1; i++)//最后一个为常数且倒数第二个次数为一,不需要打印{//两个if判断‘+’的输出if (m_indexarray[i] == 0){checkforindexarrayiszero++;tempindex--;continue;}if (m_indexarray[i] > 0)//严谨点来说这里似乎得考虑精度{//这个if是控制第一个数前面没有'+'if(checkforindexarrayiszero!=i)std::cout << '+';if (m_indexarray[i] != 1)std::cout << m_indexarray[i];std::cout << m_showtouser_character1 << m_showtouser_character2 << tempindex--;            }if (m_indexarray[i] < 0){if (m_indexarray[i] == -1)std::cout << '-' << m_showtouser_character1 << m_showtouser_character2 << tempindex--;elsestd::cout << m_indexarray[i] << m_showtouser_character1 << m_showtouser_character2 << tempindex--;}}tempindex += 1;while (tempindex--){if (m_indexarray[m_index - tempindex] == 0){checkforindexarrayiszero++;continue;}else if (m_indexarray[m_index - tempindex] > 0){  if (m_indexarray[m_index - tempindex] == 1){//tempindex==1是在判断是否是一次方,若是一次方则只需打印'+'if (tempindex == 1 && checkforindexarrayiszero != m_index-1)std::cout << '+' ;//下面两个if是对常数操作if (tempindex != 1 && checkforindexarrayiszero != m_index)std::cout << '+' << m_indexarray[m_index - tempindex];if (tempindex != 1 && checkforindexarrayiszero == m_index)std::cout << m_indexarray[m_index - tempindex];}else{//tempindex==1是在判断是否是一次方if (tempindex == 1 && checkforindexarrayiszero != m_index - 1)std::cout << '+' << m_indexarray[m_index - tempindex];//下面两个if是对常数操作if (tempindex != 1 && checkforindexarrayiszero != m_index)std::cout << '+' << m_indexarray[m_index - tempindex];if (tempindex != 1 && checkforindexarrayiszero == m_index)std::cout << m_indexarray[m_index - tempindex];}}else{if (m_indexarray[m_index - tempindex] == -1){if (tempindex == 1)std::cout << '-';elsestd::cout << m_indexarray[m_index - tempindex];}elsestd::cout << m_indexarray[m_index - tempindex];}      if (tempindex == 1)std::cout << 'x';}
}bool Poly::getarray()
{for (int i = 0; i <= m_index; i++)if (!(std::cin >> m_indexarray[i]))return false;return true;
}void Poly::getpointans(void)
{double* temp = new double[m_index + 1];unsigned long long tempindex=m_index;temp[0] = 1;for (int i = 0; i < m_index; i++){temp[i] *= m_point;m_ans += (temp[i] * m_indexarray[tempindex - 1 - i]);temp[i + 1] = temp[i];}m_ans += m_indexarray[m_index];std::cout << '\n' << m_ans << '\n';
}int main(void)
{std::cout<< "题目要求是输入一个多项式,那我就按照狭义理解不包括单独的常数项,最高次数输0也给你强制挂程序(\n\n"<< "后面所有不按要求输入都给你挂掉程序(\n"<< "首先输入带求解x的具体值\n";double point;if (!(std::cin >> point))return 0;std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');std::cout<< "输入第一个多项式的最高次数(若小数则强制向下取整,多个数输入强制取第一个):\n";long long index;if (!(std::cin >> index)||(index<=0))return 0;std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');Poly firstexpression(index, point);std::cout << "请输入每一项的系数(按照降幂依次输入,正数不需要输入+):\n";if (!firstexpression.getarray())return 0;std::cout << "\n这是你输入的第一个多项式:\n";firstexpression.showexpression();std::cout<< "\n如果没有显示,那恭喜你全部输入的0)\n";std::cout<< "\n输入第二个多项式的最高次数(若小数则强制向下取整,多个数输入强制取第一个):\n";std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');if (!(std::cin >> index)||(index<=0))return 0;std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');Poly secondexpression(index);std::cout << "请输入每一项的系数(按照降幂依次输入,正数不需要输入+):\n";if (!secondexpression.getarray())return 0;std::cout << "\n这是你输入的第二个多项式:\n";secondexpression.showexpression();std::cout << "\n如果没有显示,那恭喜你全部输入的0)\n";Poly ansexpression = firstexpression + secondexpression;std::cout << "\n这里是计算所得多项式结果:\n";std::cout << "多项式之和\n";ansexpression.showexpression();ansexpression.getpointans();std::cout << "多项式之差\n";ansexpression = firstexpression - secondexpression;ansexpression.showexpression();ansexpression.getpointans();std::cout<< "\n\n如果你发现什么式子都没输出,那就是两个多项式全部抵消完了\n"<< "下面是计算所得结果\n";system("pause");return 0;
}Poly operator+(const Poly& r1,const Poly& r2)
{unsigned long long maxindex = r1.m_index > r2.m_index ? r1.m_index : r2.m_index;unsigned long long minindex = r1.m_index < r2.m_index ? r1.m_index : r2.m_index;unsigned long long res = maxindex - minindex;Poly ans(maxindex,r1.m_point);if (r1.m_index > r2.m_index){for (unsigned long long i = 0; i < res; i++)ans.m_indexarray[i] = r1.m_indexarray[i];for (unsigned long long i = res; i <= maxindex; i++)ans.m_indexarray[i] = r1.m_indexarray[i] + r2.m_indexarray[i-res];}else{for (unsigned long long i = 0; i < res; i++)ans.m_indexarray[i] = r2.m_indexarray[i];for (unsigned long long i = res; i <= maxindex; i++)ans.m_indexarray[i] = r1.m_indexarray[i-res] + r2.m_indexarray[i];}return ans;
}Poly operator-(const Poly& r1, const Poly& r2)
{unsigned long long maxindex = r1.m_index > r2.m_index ? r1.m_index : r2.m_index;unsigned long long minindex = r1.m_index < r2.m_index ? r1.m_index : r2.m_index;unsigned long long res = maxindex - minindex;Poly ans(maxindex, r1.m_point);if (r1.m_index > r2.m_index){for (unsigned long long i = 0; i < res; i++)ans.m_indexarray[i] = r1.m_indexarray[i];for (unsigned long long i = res; i <= maxindex; i++)ans.m_indexarray[i] = r1.m_indexarray[i] - r2.m_indexarray[i - res];}else{for (unsigned long long i = 0; i < res; i++)ans.m_indexarray[i] = -r2.m_indexarray[i];for (unsigned long long i = res; i <= maxindex; i++)ans.m_indexarray[i] = r1.m_indexarray[i - res] - r2.m_indexarray[i];}return ans;
}

一元多项式加减法的C++实现相关推荐

  1. 一元多项式的加减法 C++实现

    一元多项式的加减法 描述:如题,使用正则表达式匹配多项式,数据结构为链表. 注:编译器需兼容C++11 源代码: Unary_Polynomial.h #pragma once#include < ...

  2. 一元多项式的加减法(C语言)

    要求:以文件形式输入需要进行运算的两个一元多项式,并将结果以文件的形式进行输出. #include<stdio.h> #include<stdlib.h> #include&l ...

  3. 数据结构-一元多项式加减程序

    //一元多项式加减程序 //程序:张建波 //时间:2005/7/12 PM:20-08 //功能: //     1:可以计算 1+2+3-1+2-5+6+3 (加减法均可) //     2: 可 ...

  4. C语言实现一元多项式的加减运算

    #include <stdio.h> #include <stdlib.h> #include <malloc.h> struct Node { float coe ...

  5. java多项式加法与乘法_java多项式加减法

    武汉理工大学华夏学院 课程设计报告书课程名称: 数据结构与算法分析 题目:用 C 语言实现一元多项式的加减法运算 系名: 信息工程系 专业班级: 物联网工程 1122 ...... v1.0 可编辑可 ...

  6. 【数学/多项式】用列表去实现一元多项式函数的四则运算,和它的n阶导数的Python算法实现

    目录 一元多项式函数 一元多项式函数的N阶导数 一元多项式函数的加减法 一元多项式函数的乘法 完全代码 运行结果 一元多项式函数 所谓一元多项式函数就是形如: 其中,,满足这样的形式的函数我们就称其为 ...

  7. 数据结构题 3(一元多项式计算器)

    题目: 一元多项式运算器 (1)建立多项式. (2)输出多项式. (3) +,两个多项式相加,建立并输出和多项式. (4) -,两个多项式相减,建立并输出差多项式. 扩展: (5) *,多项式乘法. ...

  8. 一元多项式计算器(C语言实现)

    一.实验要求 二.代码实现 以下C语言代码实现了多项式的加减法.乘法.求导和顶点求值的功能. (水平有限,代码存在不规范之处) 编程环境:Window11 + Visual Studio #defin ...

  9. 北邮22信通:(7)实验1 题目四:一元多项式(节省内存版)

    北邮22信通一枚~    跟随课程进度每周更新数据结构与算法的代码和文章  持续关注作者  解锁更多邮苑信通专属代码~ 上一篇文章: 北邮22信通:(6)实验1 题目三 :通讯录管理_青山如墨雨如画的 ...

最新文章

  1. DNS Tunneling及相关实现——总之,你发起攻击都需要一个DNS server,下载一些工具作为client发起数据,server收集数据并响应...
  2. gpib安装包 python_ioctl errorno:25在使用pythongpib的GPIB通信中
  3. mysql常用的视图_MySQL视图
  4. android控件属性文档,1.Android控件属性收集
  5. 食物链 POJ - 1182(带权并查集模板)
  6. A股开盘:深证区块链50指数跌0.08%,概念股跌多涨少
  7. 全国高等院校英语能力大赛模拟题
  8. spark官方文档_Spark机器学习之Pipeline
  9. python类基础知识
  10. androidid什么时候会变_高瓷绿松石是什么意思?为何绿松石的瓷度要比颜色重要?...
  11. 将mp3格式的音频转换为采样率8k的wav
  12. Github代码安全监控
  13. Eclipse菜单栏翻译
  14. 理财投资还要看贵金属
  15. 零基础计算机入门,分享人人可以参考的路线,私藏的干货视频和书单,为你的程序员生涯助力,呐喊!
  16. Universally Slimmable Networks and Improved Training Techniques
  17. VirtualBox无法安装增强工具-共享复制粘贴功能
  18. 普通话测试第四题评分标准_普通话等级考试《评分细则》.docx
  19. V3D中神经元SWC颜色对照图及色彩搭配
  20. linux 模拟硬盘故障,linux 硬盘故障解决

热门文章

  1. 华为手机怎样无线与电脑连接电脑连接服务器,华为手机助手如何无线连接电脑...
  2. 用python求解一元二次方程组
  3. 什么是iso认证周期,iso审核是一年一次吗?
  4. Unity-黑暗之魂复刻-角色摄相机
  5. u云支付 php05,优云易支付-免签约支付平台-彩虹易支付,1分钟快速接入支付功能...
  6. 最新微信小程序获取音频时长与实时获取播放进度
  7. Xmind教程-添加外框
  8. win10录屏_win10自带的录屏软件好用!!!
  9. 求两个圆交点的算法和圆与直线交点算法
  10. 读书笔记,《刻意练习》,第四章,黄金标准