/** * Класс Variable реализует целое положительное число, * представленное в виде массива его простых множителей. * * Так же перегружены основные операторы (+ - * /) */ #pragma once #include #include #include using std::vector; using std::ostream; // Получить массив простых множителей числа vector getPrimeFactors(int var) { vector result; int div = 2; while (var > 1) { while (var % div == 0) { result.push_back(div); var = var / div; } // Из четных простых делителей числа может быть только 2 if (div == 2) div++; else div += 2; } return result; } class Variable { private: vector _dividers; // Массив с делителями числа int _sign = +1; // Знак числа (либо +1, либо -1) public: Variable(int var) { // Если передали 0 if (var == 0) { _dividers.push_back(0); return; } // Если передали отризательное число if (var < 0) { _sign = -1; var = -var; } _dividers = getPrimeFactors(var); } Variable(vector ÷rs, int sign) { _dividers = dividers; _sign = sign; } vector getDividers() const { return _dividers; } int toInt() const { int result = _sign; // Умножаем знак на каждое число в векторе std::for_each(_dividers.begin(), _dividers.end(), [&](int n) { result *= n; }); return result; } int getSign() const { return _sign; } // Перегружаем операторы основных операций Variable operator+(const Variable &variable) const { return Variable(toInt() + variable.toInt()); } Variable operator-(const Variable &variable) const { return Variable(toInt() - variable.toInt()); } Variable operator*(const Variable &variable) const { vector dividers = variable.getDividers(); // Добавляем множители из текущей переменной dividers.insert(dividers.end(), _dividers.begin(), _dividers.end()); int sign = _sign * variable.getSign(); Variable newVar(dividers, sign); return newVar; } Variable operator/(const Variable &variable) const { return Variable(toInt() / variable.toInt()); } }; // Перегружаем оператор вывода ostream& operator << (ostream& ostream, const Variable &variable) { ostream << variable.toInt(); return ostream; } /** * Пример Main.cpp */ #include #include "Variable.hpp" int main() { Variable first(12); Variable second(4); Variable result = first / second; std::cout << result << std::endl; system("pause"); return 0; }