C# 你怎么能把两个分数相加?

C# 你怎么能把两个分数相加?,c#,math,C#,Math,如何在c中添加两个分数,如下所示: 11/6+3/4=31/12 然后,您将如何简化答案?首先找到LCD,然后执行以下操作 num1 *= lcd / denum1; num2 *= lcd / denum2; sumNum = num1 + num2; Net没有内置的支持(据我所知),但至少有一个现有的库 您的解决方案最终将归结为存储分子和分母(可能在您创建的自定义类中),对其他分子/分母对进行算术运算(可能在您的类上),并应用分数简化算法 以下是一些资源: 现有实施

如何在c中添加两个分数,如下所示:

11/6+3/4=31/12


然后,您将如何简化答案?

首先找到LCD,然后执行以下操作

  num1 *= lcd / denum1;
  num2 *= lcd / denum2;
  sumNum = num1 + num2;

Net没有内置的支持(据我所知),但至少有一个现有的库

您的解决方案最终将归结为存储分子和分母(可能在您创建的自定义类中),对其他分子/分母对进行算术运算(可能在您的类上),并应用分数简化算法

以下是一些资源:

现有实施

减少分数的方法

    • 我从未使用过c,但我可以给你解释一下如何使用c

    • 检查底部编号是否相同(相等)
    • 如果不是,则创建一个循环,该循环将遍历所有数字,并将它们乘以底部的数字。例如,假设你从1开始,然后乘以6,如果结果与你得到的正确数字相同,那么再乘以4
    • 然后把你在#2中得到的数字乘以上面的数字
    • 而不仅仅是加上排名靠前的数字
    • 保持底部数字不变
    • 创建一个循环,查看哪个数字可以被两个数字(顶部和底部)除

    • 在一个周五的晚上,无聊袭来。。。产生一个带有重载运算符的分数类。设计的稳健性无法保证

      它是这样工作的

      Fraction left = "1/2";
      Fraction right = "3/8";
      
      Fraction result1 = ((left + right) * left / right).Simplify();
      Console.WriteLine(result1);
      
      Fraction test2 = "12/32";
      test2 = test2.Simplify();
      Console.WriteLine(test2);
      
      实现如下所示

      public struct Fraction
      {
          public int Numerator { get; set; }
          public int Denominator { get; set; }
      
          public Fraction(int numerator, int denominator)
              : this()
          {
              Numerator = numerator;
              Denominator = denominator;
          }
      
          public Fraction Simplify()
          {
              int gcd = GCD();
              return new Fraction(Numerator / gcd, Denominator / gcd);
          }
      
          public Fraction InTermsOf(Fraction other)
          {
              return Denominator == other.Denominator ? this :
                  new Fraction(Numerator * other.Denominator, Denominator * other.Denominator);
          }
      
          public int GCD()
          {
              int a = Numerator;
              int b = Denominator;
              while (b != 0)
              {
                  int t = b;
                  b = a % b;
                  a = t;
              }
              return a;
          }
      
          public Fraction Reciprocal()
          {
              return new Fraction(Denominator, Numerator);
          }
      
      
          public static Fraction operator +(Fraction left, Fraction right)
          {
              var left2 = left.InTermsOf(right);
              var right2 = right.InTermsOf(left);
      
              return new Fraction(left2.Numerator + right2.Numerator, left2.Denominator);
          }
      
          public static Fraction operator -(Fraction left, Fraction right)
          {
              var left2 = left.InTermsOf(right);
              var right2 = right.InTermsOf(left);
      
              return new Fraction(left2.Numerator - right2.Numerator, left2.Denominator);
          }
      
          public static Fraction operator *(Fraction left, Fraction right)
          {
              return new Fraction(left.Numerator * right.Numerator, left.Denominator * right.Denominator);
          }
      
          public static Fraction operator /(Fraction left, Fraction right)
          {
              return new Fraction(left.Numerator * right.Denominator, left.Denominator * right.Numerator);
          }
      
          public static implicit operator Fraction(string value)
          {
              var tokens = value.Split('/');
              int num;
              int den;
              if (tokens.Length == 1 && int.TryParse(tokens[0], out num))
              {
                  return new Fraction(num, 1);
              }
              else if (tokens.Length == 2 && int.TryParse(tokens[0], out num) && int.TryParse(tokens[1], out den))
              {
                  return new Fraction(num, den);
              }
              throw new Exception("Invalid fraction format");
          }
      
          public override string ToString()
          {
              return string.Format("{0}/{1}", Numerator, Denominator);
          }
      }
      

      通过嵌套循环查找LCM?有很多更好的方法可以做到这一点。@Mehrdad:我想我真正反对的是“通过所有数字”。我本来可以把这句话说得更好。我提到我从未使用过C,所以我以前从未见过LCM。@hi-tech:我想他的意思是“最小公倍数”,是的,lcd是一个糟糕的首字母缩略词。我很确定他指的是“最小公分母”,lcd是一个非常准确的首字母缩略词。我修改了隐式运算符,以支持从整数中创建分数<代码>分数整=“5”将起作用。或者,您可以做一些漂亮的事情,比如
      Fraction test=left+“5”好极了。这太棒了。你应该为此得到这么多的选票。这一定不是一个普遍的问题。