第一种方法为本人自编(按平时化简分数的思维写的算法)
class Rational
{ int x;//分子
int y;//分母
public:
Rational(int x0 = 0, int y0 = 1)//构造函数,默认是分子为0,分母为1
{
Set(x0, y0);//化简
}
void Set(int x0, int y0)
{
for (int i =(x0>y0)?y0:x0;i>1;i--)//从分子分母中较小的那个开始找
{
if (x0%i == 0 && y0%i == 0)//找最大公因数
{
x0 /= i;//分子分母同时除以最大公因数i
y0 /= i;
}
}
x = x0;
y = y0;
}
};
第二种方法为常规找公因数的算法
class Rational
{
int x;//分子
int y;//分母
int Common_Divisor(int x0, int y0)//最大公因数
{
//以下为常用求最大公因数算法
int c;
do {
c = x0%y0;//求余
x0 = y0;
y0 = c;//取余数
} while (c != 0);
return x0;
}
public:
Rational(int x0 = 0, int y0 = 1)
{
int c;
c= Common_Divisor(x0, y0);//若要求最小公倍数只需x0*y0/c即得,简而言之就是最小公倍数=x0*y0/c
x = x0 / c;//分子/最大公因数
y = y0/ c;//分母/最大公因数
}};