【问题标题】:fraction shortening C++分数缩短 C++
【发布时间】:2013-03-20 16:36:31
【问题描述】:

我需要缩短分数: 4/5 * 3/4 = 12/20 ,但我需要缩短它,所以答案必须是:3/5。 我知道我必须使用这个功能:

int NWD(int m1,int m2){
   int d;
   while((m1!=0)&&(m2!=0)){
    if(m1>=m2) m1=m1%m2;
    else m2=m2%m1;
    return d=m1+m2;}
    }

那你能帮帮我吗?

【问题讨论】:

  • 为什么必须使用该功能?它似乎没有做任何有用的事情,甚至没有连贯性。
  • 你试过用谷歌搜索 GCD 吗?
  • 是的,我试过谷歌搜索,但我不明白如何使用它。
  • 欧几里德在公元前 300 年发现了它 - people.cis.ksu.edu/~schmidt/301s12/Exercises/euclid_alg.html

标签: c++ function short


【解决方案1】:

您需要将分子和分母都除以这两个数字的 GCD。

计算 GCD int

gcdr ( int a, int b )
{
  if ( a==0 ) return b;
  return gcdr ( b%a, a );
}

礼貌:for GCD code snippet

【讨论】:

    【解决方案2】:

    您可以通过将分子和分母都除以两者的最大公约数来简化这些分数。计算 GCD 的常用方法是Euclidean algorithm

    【讨论】:

      【解决方案3】:

      这看起来像是您的函数的正确版本。

      int NWD(int m1,int m2){
         while((m1!=0)&&(m2!=0)){
          if(m1>=m2) m1=m1%m2;
          else m2=m2%m1;
         }
         return m1+m2;
      }
      
      int num = 12;
      int den = 20;
      int d = NWD(num,den);
      cout << num/d << '/' << den/d;
      

      未经测试的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-23
        • 1970-01-01
        • 2013-02-26
        • 2018-10-28
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        相关资源
        最近更新 更多