1,分数的表示-----直接写成假分数,用结构体
为分数制定三项规则:
1.使down为非负数。如果分数为负,那么令分子为负即可;
2.如果该分数恰为0,那么规定其分子为0,分母为1;
3.分子和分母没有除了1以外的公约数;
struct Fraction{
int up,down //分子,分母
};
2,分数的化简
分数的化简有三种情况:
1.如果分母down为负数,那么令分子为负,分母为真,即分子分母取相反数;
2.如果分子up为0,那么直接令分母为1;
3.约分,求分子分母绝对值的最大公约数d,然后令分子分母同时除d
Fraction reduction(Fraction result)
{
if(result.down){
result.dowm=-result.down;
result.up=result.up;
}
if(result.up==0)
result.dowm=1;
else{
int d=gcd(abs(result.up),abs(result.down)); //调用gcd函数,abs库函数
result.up/=d;
result.dowm/=d;
}
return result;
}
3,分数的四则运算
1)加法
Fraction add(Fraction f1,Fraction f2)
{
Fraction result;
result.up=f1.up*f2.down+f1.down*f2.up;
result.down=f1.down*f2.down;
return result;
}
2)减法
Fraction minu(Fraction f1,Fraction f2)
{
Fraction result;
result.up=f1.up*f2.down-f1.down*f2.up;
result.down=f1.down*f2.down;
return result;
}
3)乘法
Fraction add(Fraction f1,Fraction f2)
{
Fraction result;
result.up=f1.up*f2.up;
result.down=f1.down*f2.down;
return result;
}
4)除法
Fraction add(Fraction f1,Fraction f2)
{
Fraction result;
result.up=f1.up*f2.down;
result.down=f1.down*f2.up;
return result;
}
除法要注意,如果输入的除数为0,那么应该在进入函数之前进行特判
4,分数的输出
输出有一下注意点:
1.输出之前,要化简分数;
2.如果分母为1,则应该输出分子;
3.如果分子up的绝对值大于分母down,应计算整数部分r.up/r.down,分子部分变为abs(r.up)%r.down;
void showResult(Fraction r)
{
if(r.down==1) printf("%d",r.up);
else if(abs(r.up)>r.down)
printf("%d %d/%d",r.up/r.down,abs(r.up)%r.down,r.down);
else
printf("%d/%d",r.up,r.down);
}
注意,分数的乘法 除法,可能爆int 所以一般用long long来保存分子分母