分数缩短 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++的主要内容,如果未能解决你的问题,请参考以下文章