Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- namespace lab7
- {
- class MainClass
- {
- interface IE
- {
- bool Equals(object x);
- }
- class Fraction : IE
- {
- public long numerator;
- public long denominator;
- public Fraction(long numerator, long denominator)
- {
- long sign = 0;
- if (numerator < 0)
- sign++;
- if (denominator < 0)
- sign++;
- if(denominator == 0)
- throw new InvalidOperationException("Denominator cannot be assigned a 0 Value.");
- numerator = Math.Abs(numerator);
- denominator = Math.Abs(denominator);
- if (sign == 1)
- numerator *= -1;
- long GCD = gcd(numerator, denominator);
- numerator /= GCD;
- denominator /= GCD;
- this.numerator = numerator;
- this.denominator = denominator;
- }
- public static Fraction operator + (Fraction x, Fraction y)
- {
- long newDenominator = (x.denominator * y.denominator) / gcd(x.denominator, y.denominator);
- long newNumerator = x.numerator * newDenominator / x.denominator + y.numerator * newDenominator / y.denominator;
- return new Fraction(newNumerator, newDenominator);
- }
- public static Fraction operator - (Fraction x, Fraction y)
- {
- long newDenominator = (x.denominator * y.denominator) / gcd(x.denominator, y.denominator);
- long newNumerator = x.numerator * newDenominator / x.denominator - y.numerator * newDenominator / y.denominator;
- return new Fraction(newNumerator, newDenominator);
- }
- public static Fraction operator * (Fraction x, Fraction y)
- {
- long newNumerator = x.numerator * y.numerator;
- long newDenominator = x.denominator * y.denominator;
- return new Fraction(newNumerator, newDenominator);
- }
- public static Fraction operator / (Fraction x, Fraction y)
- {
- long newNumerator = x.numerator * y.denominator;
- long newDenominator = x.denominator * y.numerator;
- return new Fraction(newNumerator, newDenominator);
- }
- public static long gcd(long x, long y)
- {
- x = Math.Abs(x);
- y = Math.Abs(y);
- while(x > 0 && y > 0)
- {
- if (x > y)
- x %= y;
- else
- y %= x;
- }
- return x + y;
- }
- public bool Equals(Fraction other)
- {
- return (other.numerator == this.numerator && other.denominator == this.denominator);
- }
- public static Fraction DoubleToFraction(string str)
- {
- /*bool ok = false;
- for (int j = 0; j < str.Length; ++j)
- {
- if(str[j] == '.') continue;
- if (str[j] != '0') ok = true;
- }
- if(ok == false)
- {
- return new Fraction(0, 1);
- }
- */
- long i = str.IndexOf('.');
- long d = str.Length - i;
- double f = Convert.ToDouble(str);
- long newNumerator = (long)(f * Math.Pow(10, d));
- long newDenominator = (long)Math.Pow(10, d);
- //Console.WriteLine(newNumerator);
- //Console.WriteLine(newDenominator);
- return new Fraction(newNumerator, newDenominator);
- }
- public static Fraction parse(string str)
- {
- int i = str.IndexOf('/');
- if(i == -1)
- {
- return DoubleToFraction(str);
- }
- long newNumerator = Convert.ToInt64(str.Substring(0, i));
- long newDenominator = Convert.ToInt64(str.Substring(i + 1));
- return new Fraction(newNumerator, newDenominator);
- }
- public static implicit operator double(Fraction r)
- {
- return (double)r.numerator / r.denominator;
- }
- public static implicit operator Fraction(double r)
- {
- string str = Convert.ToString(r);
- return Fraction.parse(str);
- }
- public string toString()
- {
- double res = (double)this.numerator / this.denominator;
- return Convert.ToString(res);
- }
- public string getStrFraction()
- {
- string ans = this.numerator.ToString() + '/' + this.denominator.ToString();
- return ans;
- }
- }
- public static void Main(string[] args)
- {
- Fraction x = Fraction.parse(Console.ReadLine());
- Fraction y = Fraction.parse(Console.ReadLine());
- //Console.WriteLine(x.Equals(y));
- //double t = 0.15;
- //Fraction r = t;
- //Console.WriteLine(r.toString());
- //Console.WriteLine(r.getStrFraction());
- x += y;
- Console.WriteLine(x.toString());
- Console.WriteLine(x.getStrFraction());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement