1.分数的存储
struct node{
int up,down;
node()
{
up=0;
down=1;
}
}result;
2.分数的四则运算,以加法为例
node add(node a,node b)
{
node result;
result.up=a.up*b.down+a.down*b.up;
result.down=a.down*b.down;
return reduction(result);//化简
}
3.分数的化简
- 如果down为负数,那么令up和down都变为相反数
- 如果up为0,令分母down为1
- 约分,求出分子绝对值和分母绝对值的最大公约数d,然后令分子和分母绝对值同时除以d。(不然求出来的d可能为负数)
node reduction(node a)
{
if(a.down<0)
{
a.up=-a.up;
a.down=-a.down;
}
if(a.up==0) a.down=1;
else
{
int g=__gcd(abs(a.up),abs(a.down));
a.down/=g;
a.up/=g;
}
return a;
}
4,分数的输出:分为真分数和假分数,也有可能是整数。
void print(node a)
{
reduction(a);
if(a.down==1) cout<<a.up; //整数
else if(abs(a.up)>a.down)//真分数
{
//这里的绝对值一定不能缺,不然会出问题,假分数前也出现负号
cout<<a.up/a.down<<" "<<abs(a.up)%a.down<<"/"<<a.down;
}
else//假分数
cout<<a.up<<"/"<<a.down;
}