Advertisement
olegstankoptev

Untitled

Apr 27th, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. using System;
  2.  
  3. public class Rational
  4. {
  5.  
  6. int numerator;
  7. int denomenator;
  8.  
  9. private Rational(int n, int d)
  10. {
  11. if (n > 0 && d < 0)
  12. {
  13. d = -d;
  14. n = -n;
  15. }
  16.  
  17. for (int i = 2; i < d; i++)
  18. {
  19. if (n % i == 0 && d % i == 0)
  20. {
  21. n /= i;
  22. d /= i;
  23. }
  24. }
  25.  
  26. numerator = n;
  27. denomenator = d;
  28. }
  29.  
  30. public static Rational operator +(Rational a, Rational b)
  31. {
  32. int numer = a.numerator * b.denomenator + b.numerator * a.denomenator;
  33. int denumer = a.denomenator * b.denomenator;
  34. return new Rational(numer, denumer);
  35. }
  36.  
  37. public static Rational operator -(Rational a, Rational b)
  38. {
  39. int numer = a.numerator * b.denomenator - b.numerator * a.denomenator;
  40. int denumer = a.denomenator * b.denomenator;
  41. return new Rational(numer, denumer);
  42. }
  43.  
  44. public static Rational operator *(Rational a, Rational b)
  45. {
  46. return new Rational(a.numerator * b.numerator, a.denomenator * b.denomenator);
  47. }
  48.  
  49. public static Rational operator /(Rational a, Rational b)
  50. {
  51. return new Rational(a.numerator * b.denomenator, a.denomenator * b.numerator);
  52. }
  53.  
  54. public static Rational Parse(string input)
  55. {
  56. string[] inputArr = input.Split('/');
  57. int a;
  58. int b = 1;
  59. if (int.TryParse(inputArr[0], out a))
  60. {
  61. if (inputArr.Length == 2)
  62. {
  63. if (!int.TryParse(inputArr[1], out b))
  64. {
  65. throw new ArgumentException();
  66. }
  67. }
  68. return new Rational(a, b);
  69. }
  70. throw new ArgumentException();
  71. }
  72.  
  73. public override string ToString()
  74. {
  75. if (numerator % denomenator == 0) return (numerator / denomenator).ToString();
  76. return numerator.ToString() + '/' + denomenator;
  77. }
  78.  
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement