Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5. template<typename T>
  6. class Polynomial {
  7. private:
  8. vector<T> coefficients;
  9. void Remove_zeros() {
  10. while(coefficients.size() && coefficients.back() == T(0)) {
  11. coefficients.pop_back();
  12. }
  13. if (coefficients.empty()) {
  14. coefficients = {T()};
  15. }
  16. }
  17. public:
  18. Polynomial(const std::vector<T>& v) : coefficients(v) {
  19. Remove_zeros();
  20. }
  21. Polynomial(const T& c = T()) {
  22. coefficients = {c};
  23. Remove_zeros();
  24. }
  25. template<typename Iter>
  26. Polynomial(Iter first, Iter last) {
  27. coefficients = vector<T>(first, last);
  28. Remove_zeros();
  29. }
  30. bool operator == (const Polynomial<T>& other) const {
  31. return coefficients == other.coefficients;
  32. }
  33. bool operator != (const Polynomial<T>& other) const {
  34. return !(coefficients == other.coefficients);
  35. }
  36. Polynomial operator += (const Polynomial<T>& other) {
  37. if (coefficients.size() < other.coefficients.size()) {
  38. coefficients.resize(other.coefficients.size());
  39. }
  40. for (size_t i = 0; i < other.coefficients.size(); ++i) {
  41. coefficients[i] += other.coefficients[i];
  42. }
  43. Remove_zeros();
  44. return *this;
  45. }
  46. Polynomial& operator += (const T& scalar) {
  47. coefficients[0] += scalar;
  48. return *this;
  49. }
  50. Polynomial operator -= (const Polynomial<T>& other) {
  51. if (coefficients.size() < other.coefficients.size()) {
  52. coefficients.resize(other.coefficients.size());
  53. }
  54. for (size_t i = 0; i < other.coefficients.size(); ++i) {
  55. coefficients[i] -= other.coefficients[i];
  56. }
  57. Remove_zeros();
  58. return *this;
  59. }
  60. Polynomial& operator -= (const T& scalar) {
  61. coefficients[0] -= scalar;
  62. return *this;
  63. }
  64. Polynomial operator *= (const T& scalar) {
  65. for (size_t i = 0; i < coefficients.size(); ++i) {
  66. coefficients[i] *= scalar;
  67. }
  68. Remove_zeros();
  69. return *this;
  70. }
  71. Polynomial operator *= (const Polynomial<T>& other) {
  72. std::vector<T> new_C(coefficients.size() + other.coefficients.size() + 1);
  73. for (size_t i = 0; i <= coefficients.size(); ++i) {
  74. for (size_t j = 0; j <= other.coefficients.size(); ++j) {
  75. new_C[i + j] += coefficients[i] * other.coefficients[j];
  76. }
  77. }
  78. coefficients = new_C;
  79. Remove_zeros();
  80. return *this;
  81. }
  82. const T operator [](size_t degree) const {
  83. if (degree > coefficients.size() - 1) {
  84. return T(0);
  85. }
  86. return coefficients[degree];
  87. }
  88. int Degree() const {
  89. if (coefficients.size() == 1 && coefficients[0] == T()) {
  90. return -1;
  91. }
  92. return coefficients.size() - 1;
  93. }
  94. T operator () (const T& x) const {
  95. T deg = T(1);
  96. T result = T(0);
  97. for (size_t i = 0; i < coefficients.size(); ++i) {
  98. result += coefficients[i] * deg;
  99. deg *= x;
  100. }
  101. return result;
  102. }
  103. typename vector<T>::const_iterator begin() const {
  104. return coefficients.begin();
  105. }
  106.  
  107. typename vector<T>::const_iterator end() const {
  108. return coefficients.end();
  109. }
  110. friend ostream& operator << (std::ostream& out, const Polynomial<T>& p);
  111. };
  112. template<typename T>
  113. ostream& operator << (ostream& out, const Polynomial<T>& a) {
  114. if (a.Degree() == -1) {
  115. return out << "0";
  116. }
  117. for (int i = a.coefficients.size() - 1; i >= 0; --i) {
  118. if (a[i] != T(0)) {
  119. if (a[i] > T(0) && i != a.coefficients.size() - 1) {
  120. out << "+";
  121. }
  122. if (i == 0) {
  123. out << a[i];
  124. } else if (a[i] == T(-1)) {
  125. out << "-";
  126. } else if (a[i] != T(1)) {
  127. out << a[i] << "*";
  128. }
  129. if (i > 0) {
  130. out << "x";
  131. if (i > 1) {
  132. out << "^" << i;
  133. }
  134. }
  135. }
  136. }
  137. return out;
  138. }
  139. template<typename T>
  140. bool operator == (const Polynomial<T>& a, const T& scalar) {
  141. return (a == Polynomial<T>(scalar));
  142. }
  143. template<typename T>
  144. bool operator == (const T& scalar, const Polynomial<T>& a) {
  145. return (a == Polynomial<T>(scalar));
  146. }
  147. template<typename T>
  148. bool operator != (const Polynomial<T>& a, const T& scalar) {
  149. return !(a == scalar);
  150. }
  151. template<typename T>
  152. bool operator != (const Polynomial<T>& a, const Polynomial<T>& b) {
  153. return !(a == b);
  154. }
  155. template<typename T>
  156. bool operator != (const T& scalar, const Polynomial<T>& a) {
  157. return !(a == scalar);
  158. }
  159. template<typename T>
  160. Polynomial<T> operator + (const Polynomial<T>& a, const Polynomial<T>& b) {
  161. auto k = a;
  162. return k += b;
  163. }
  164. template<typename T>
  165. Polynomial<T> operator + (const T& scalar, const Polynomial<T>& a) {
  166. auto k = a;
  167. return k += scalar;
  168. }
  169. template<typename T>
  170. Polynomial<T> operator - (const Polynomial<T>& a, const Polynomial<T>& b) {
  171. auto k = a;
  172. return k -= b;
  173. }
  174. template<typename T>
  175. Polynomial<T> operator - (const T& scalar, const Polynomial<T>& a) {
  176. auto k = a;
  177. return k -= scalar;
  178. }
  179. template<typename T>
  180. Polynomial<T> operator * (const T& scalar, const Polynomial<T>& a) {
  181. auto k = a;
  182. return k *= scalar;
  183. }
  184. template<typename T>
  185. Polynomial<T> operator * (const Polynomial<T>& a, const Polynomial<T>& b) {
  186. auto k = a;
  187. return k *= b;
  188. }
  189. int main() {
  190. vector<int> d, f;
  191. d.resize(5);
  192. f.resize(7);
  193. for (size_t i = 0; i < 5; ++i) {
  194. cin >> d[i];
  195. }
  196. for (size_t i = 0; i < 7; ++i) {
  197. cin >> f[i];
  198. }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement