分数缩短 C++

Posted

技术标签:

【中文标题】分数缩短 C++【英文标题】:fraction shortening 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 【参考方案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;

未经测试的代码。

【讨论】:

以上是关于分数缩短 C++的主要内容,如果未能解决你的问题,请参考以下文章

一次性集中处理大量数据的定时任务,如何缩短执行时间?

一次性集中处理大量数据的定时任务,如何缩短执行时间?

力扣1447. 最简分数 C++ gcd

LeetCode 0592. 分数加减运算:手把手分步のC++讲解

C++实现分数四则运算

[C++] 实现余弦相似度分数计算