5.3.1 分数的表示和简化:
1.分数的表示:
struct Fraction
{
int up,down;
};
2.分数的化简:
struct Fraction
{
int up,down; //设置一个分数结构,分母为up,分子为down
};
Fraction reduction(Fraction result)
{
if(result.up<0) //如果 分子<0,则把分母,分子都设置为相反数
{
result.up=-result.up;
result.down=-result.down;
}
if(result.up==0) //如果分子为0,则把分母设置为1
{
result.down=1;
}
else //如果正常的分数,则化简我们的分子,分母
{
int d=gcd(abs(result.up),abs(result.down)); //再求分子,分母的最大公约数的时候;要把分子,分母改为绝对值形式
up=up/d;
down=down/d;
}
return result;
}
3.两个分数相加:
struct Fraction
{
int up,down; //设置一个分数结构,分母为up,分子为down
};
Fraction add(Fraction result1,Fraction result2)
{
Fraction result3;
result3.up=result1.up*result2.down+result2.up*result1.down;
result3.down=result1.down*result2.down;
return reduction(result3);
}
4.两个分数相减:
struct Fraction
{
int up,down; //设置一个分数结构,分母为up,分子为down
};
Fraction minu(Fraction result1,Fraction result2)
{
Fraction result3;
result3.up=result1.up*result2.down-result2.up*result1.down;
result3.down=result1.down*result2.down;
return reduction(result3);
}
5.两个分数相乘:
struct Fraction
{
int up,down; //设置一个分数结构,分母为up,分子为down
};
Fraction multi(Fraction result1,Fraction result2)
{
Fraction result3;
result3.up=result1.up*result2.up;
result3.down=result1.down*result2.down;
return reduction(result3);
}
5.两个分数相除:
struct Fraction
{
int up,down; //设置一个分数结构,分母为up,分子为down
};
Fraction divide(Fraction result1,Fraction result2)
{
Fraction result3;
result3.up=result1.up*result2.down;
result3.down=result1.down*result2.up;
return reduction(result3);
}
注意事项:
如果除数为0,则直接输出Error和Inf;只有当除数不为0时,才可以用上面的方法
6.输出分数:
//现在就是输出分数,先对输入的数据进行化简,如果分母是1,表示为整数,则直接输出分子;如果分子的绝对值
//大于分母则直接写成假分数的形式,其他的情况,直接写成真分数
void showResult(Fraction r) //输出的话,注意函数类型是void
{
r=reduction(r); //先对要输出的分数进行化简
if(r.down==1)
printf("%11d".r.up); //如果分母是1,则直接输出分子
else if(abs(r.up)>r.down) //假分数
printf("%d %d/%d",abs(r.up)/r.down,abs(r.up)%r.down,r.down);
else
printf("%d/%d",r.up,r.down); //最后直接输出真分数
}
注意:在输出分子和分母的时候,要将分子,分母设置为long long类型