Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdio>
- #include <vector>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int gcd(int number1, int number2) {
- if(number1 == 0){
- return number2;
- }
- int gcd = abs(number1 < number2 ? number1 : number2);
- while (gcd != 1) {
- if (number1 % gcd == 0 && number2 % gcd == 0) {
- return gcd;
- }
- --gcd;
- }
- return 1;
- }
- class rational {
- int numerator_;
- int denominator_;
- public:
- rational(int numerator, int denominator){
- int divisor = gcd(numerator, denominator);
- numerator_ = numerator / divisor;
- denominator_ = denominator / divisor;
- }
- int get_numerator() const {
- return numerator_;
- }
- rational& set_numerator(int numerator){
- numerator_ = numerator;
- return *this;
- }
- int get_denominator() const {
- return denominator_;
- }
- rational& set_denominator(int denominator){
- denominator_ = denominator;
- return *this;
- }
- void fix(){
- int gcd1 = gcd(numerator_, denominator_);
- numerator_ /= gcd1;
- denominator_ /= gcd1;
- if(denominator_ < 0){
- denominator_ *= -1;
- numerator_ *= -1;
- }
- }
- rational& add(const rational& other){
- long numerator_first = other.denominator_ * numerator_;
- long numerator_second = denominator_ * other.numerator_;
- numerator_ = numerator_first + numerator_second;
- denominator_ *= other.denominator_;
- this->fix();
- return *this;
- }
- rational& substract(const rational& other){
- long numerator_first = other.denominator_ * numerator_;
- long numerator_second = denominator_ * other.numerator_;
- numerator_ = numerator_first - numerator_second;
- denominator_ *= other.denominator_;
- this->fix();
- return *this;
- }
- rational& multiplication(const rational& other){
- numerator_ = numerator_ * other.numerator_;
- denominator_ *= other.denominator_;
- this->fix();
- return *this;
- }
- rational& division(const rational& other){
- numerator_ = numerator_ * other.denominator_;
- denominator_ *= other.numerator_;
- this->fix();
- return *this;
- }
- rational operator+=(const rational& input){
- this->add(input);
- return *this;
- }
- rational operator-=(const rational& input){
- this->substract(input);
- return *this;
- }
- rational operator*=(const rational& input){
- this->multiplication(input);
- return *this;
- }
- rational operator/=(const rational& input){
- this->division(input);
- return *this;
- }
- };
- rational operator-(const rational& r1, const rational& r2){
- rational result(r1.get_numerator(), r1.get_denominator());
- result.substract(r2);
- return result;
- }
- rational operator/(const rational& r1, const rational& r2){
- rational result(r1.get_numerator(), r1.get_denominator());
- result.division(r2);
- return result;
- }
- istream& operator>>(istream& in, rational& input) {
- char ch=0;
- int numerator=0, denominator=0;
- in >> ch; //(
- if(ch!='(') {
- in.clear(ios_base::badbit);
- return in;
- }
- in >> numerator;
- in >> ch; //,
- if(ch!='/') {
- in.clear(ios_base::badbit);
- return in;
- }
- in >> denominator;
- in >> ch; //)
- if(ch!=')') {
- in.clear(ios_base::badbit);
- return in;
- }
- if(in.good()) {
- input.set_numerator(numerator);
- input.set_denominator(denominator);
- }
- return in;
- }
- ostream& operator<<(ostream& out, const rational& result){
- out << "(" << result.get_numerator() << "/" << result.get_denominator() << ")" << endl;
- return out;
- }
- int main(){
- rational result(0,1);
- rational input(0,1);
- string str;
- char symbol;
- char last;
- while(1){
- cin >> input;
- if(!cin.good()){
- break;
- }
- result = input;
- while(1){
- last = symbol;
- cin >> symbol;
- if(symbol == '='){
- cout << ">" << " " << result;
- break;
- }
- cin >> input;
- if(!cin.good()){
- break;
- }
- if(symbol == '+'){
- result += input;
- }
- else if(symbol == '-'){
- result = result - input;
- }
- else if(symbol == '*'){
- result *= input;
- }
- else if(symbol == '/'){
- result = result / input;
- }
- }
- }
- cout << ">";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement