Calculation Of Polynomial(多项式的运算) C++
2015-08-03 20:53
507 查看
本文实现了一个多项式的类,类中重载了多项式的加法、减法、乘法,并且对>> 和 << 进行了重载。
其中多项式的输入(输出)格式为: K N1 aN1 N2 aN2 ... NK aNK
其中K表示多项式的系数,NK表示第K项的系数aNk相应的系数,并且多项式的系数递减的序列。
其中多项式的输入(输出)格式为: K N1 aN1 N2 aN2 ... NK aNK
其中K表示多项式的系数,NK表示第K项的系数aNk相应的系数,并且多项式的系数递减的序列。
//polynomial.h #include <iostream> #include <vector> #include <iomanip> class polynomial { private: std::vector<double> coefficient; std::vector<int> radix; public: polynomial(){} polynomial(const polynomial &poly){ *this = poly; } ~polynomial(){} friend polynomial operator+(const polynomial &poly1, const polynomial &poly2); friend polynomial operator-(const polynomial &poly1, const polynomial &poly2); polynomial& operator+=(const polynomial &poly){ *this = *this + poly; return *this; } polynomial& operator-=(const polynomial &poly){ *this = *this - poly; return *this; } friend polynomial operator*(const polynomial &poly1, const polynomial &poly2); friend std::istream& operator>>(std::istream &is, polynomial &poly); friend std::ostream& operator<<(std::ostream &os, const polynomial &poly); }; polynomial operator+(const polynomial &poly1, const polynomial &poly2) { polynomial polysum; int i = 0, j = 0; while (i<poly1.radix.size() || j<poly2.radix.size()) { //only poly1 if (i<poly1.radix.size() && j == poly2.radix.size()) { polysum.radix.push_back(poly1.radix[i]); polysum.coefficient.push_back(poly1.coefficient[i]); i++; } //only poly2 else if (j<poly2.radix.size() && i == poly1.radix.size()) { polysum.radix.push_back(poly2.radix[j]); polysum.coefficient.push_back(poly2.coefficient[j]); j++; } //the radix of poly1 greater than poly2 else if (poly1.radix[i] > poly2.radix[j]) { polysum.radix.push_back(poly1.radix[i]); polysum.coefficient.push_back(poly1.coefficient[i]); i++; } //the radix of poly1 smaller than poly2 else if (poly1.radix[i] < poly2.radix[j]) { polysum.radix.push_back(poly2.radix[j]); polysum.coefficient.push_back(poly2.coefficient[j]); j++; } //the radix of poly1 equal to poly2 else { if (poly1.coefficient[i] + poly2.coefficient[j] != 0) { polysum.radix.push_back(poly1.radix[i]); polysum.coefficient.push_back(poly1.coefficient[i] + poly2.coefficient[j]); } i++; j++; } } return polysum; } polynomial operator-(const polynomial &poly1, const polynomial &poly2) { polynomial negativePoly; negativePoly = poly2; for (int i = 0; i < negativePoly.coefficient.size(); i++) negativePoly.coefficient[i] = -negativePoly.coefficient[i]; return poly1 + negativePoly; } polynomial operator*(const polynomial &poly1, const polynomial &poly2) { polynomial mul; int i = 0; while (i < poly2.coefficient.size()) { polynomial part = poly1; double coefficient = poly2.coefficient[i]; int radix = poly2.radix[i]; for (int j = 0; j < part.coefficient.size(); j++) { part.radix[j] += radix; part.coefficient[j] *= coefficient; } mul += part; i++; } return mul; } std::istream& operator>>(std::istream &is, polynomial &poly) { int k; is >> k; for (int i = 0; i<k; i++) { double tmpcoe; int tmprad; is >> tmprad >> tmpcoe; poly.radix.push_back(tmprad); poly.coefficient.push_back(tmpcoe); } return is; } std::ostream& operator<<(std::ostream &os, const polynomial &poly) { os << poly.radix.size(); if (poly.radix.size() != 0) std::cout << " "; for (int i = 0; i<poly.radix.size(); i++) { os << poly.radix[i] << " " << std::fixed << std::setprecision(1) << poly.coefficient[i]; if (i != poly.radix.size() - 1) os << " "; } return os; }
相关文章推荐
- 【c++】虚基类
- C++中cin和cin.getline函数连用的问题
- POJ1125Floyd-warshall算法模板题
- C语言深度解剖——读书笔记-12、内存管理
- 《C++编程思想》 第十章 引用和拷贝构造函数(原书代码+知识点+习题+解答)
- C++ 智能指针详解
- 今天在网上看到一个百度的C++面试题目
- JNI_最简单的Java调用C/C++代码(自己整理)
- c++11 中的 move 与 forward
- QString、string相互转换
- C++11 标准新特性: 右值引用与转移语义
- c++实现基于单进程单客户编程模型的echo程序
- 动态规划之UNIMODAL PALINDROMIC DECOMPOSITIONS
- C++中this指针的用法.
- C++零碎知识点
- C语言笔记
- IOS使用纯C语言创建静态库
- C语言-变量的存储类别(auto, static, register, extern)
- 【effective c++读书笔记】【第4章】设计与声明(2)
- 【effective c++读书笔记】【第4章】设计与声明(2)