求最大公因数:
辗转相除法有一个高大上的名字:欧几里得法。
下面模拟辗转相除法求a, b的最大公因数:
int gcd(int a, int b)
{
return b == 0 ? a:gcd(b, a%b);
}
求最小公倍数:
//最小公倍数=两数的乘积/最大公约数,所以可在最大公约数的基础上求最小公倍数
int lcm(int x,int y)
{
int gcd=gcd(x,y);
return (x*y)/gcd;
}
最简约分:
约分:分子和分母除去最大公因数
/*7-24 约分最简分式 (15 分)
分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。
最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;
而当分子分母相等时,仍然表达为1/1的分数形式。
输入格式:
输入在一行中给出一个分数,分子和分母中间以斜杠/分隔,如:12/34表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。
ps:两种情况:1.不用约分 2.约分,约掉最大公因数
流程:求最大公因数,分子分母再除去最大公因数*/
#include <stdio.h>
int gcd(int iNumA, int iNumB);
int main()
{
int iNumerator, iDenominator, iCommonFactor, i;
scanf("%d/%d", &iNumerator, &iDenominator);
if(iNumerator < iDenominator)
{
iCommonFactor = gcd(iNumerator, iDenominator);
}
else if(iNumerator > iDenominator)
{
iCommonFactor = gcd(iDenominator, iNumerator);
}
else
{
iCommonFactor = iNumerator;
}
printf("%d/%d", iNumerator / iCommonFactor, iDenominator / iCommonFactor);
return 0;
}
int gcd(int iNumA, int iNumB)
{
return iNumB == 0 ? iNumA : gcd(iNumB, iNumA % iNumB);
}
/*
输入:6/12 输出:1/2
输入:6/6 输出:1/1
输入:12/6 输出:2/1
*/