算法竞赛--分数的四则运算

分数的表示

1
2
3
4
5
struct Fraction
{
int up;
int down;
};

分数的化简

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Fraction rule(Fraction a)
{
Fraction result;
if(a.down<0) //分母为负数的情况
{
result.down=-a.down;
result.up=-a.up;
}
if(a.up==0) //分子为0的情况
result.down=1;
else //分子不为0
{
int temp=gcd(abs(a.down),abs(a.up));
result.down=a.down/temp;
result.up=a.up/temp;
}
return result;
}

分数的加法

1
2
3
4
5
6
7
Fraction add(Fraction a,Fraction b)
{
Fraction r;
r.down=a.down*b.down;
r.up=a.up*b.down+b.up*a.down;
return Fraction rule(r);
}

分数的减法

1
2
3
4
5
6
7
Fraction add(Fraction a,Fraction b)
{
Fraction r;
r.down=a.down*b.down;
r.up=a.up*b.down-b.up*a.down;
return Fraction rule(r);
}

分数的乘法

1
2
3
4
5
6
7
Fraction add(Fraction a,Fraction b)
{
Fraction r;
r.down=a.down*b.down;
r.up=a.up*b.up;
return Fraction rule(r);
}

分数的除法

1
2
3
4
5
6
7
Fraction add(Fraction a,Fraction b)
{
Fraction r;
r.down=a.down*b.up;
r.up=a.up*b.down;
return Fraction rule(r);
}

分数的输出

1
2
3
4
5
6
7
8
9
void result(Fraction a)
{
if(a.down==1) //整数
printf("%d",a.up);
if(a.up>a.down) //假分数
printf("%d %d/%d",a.up/a.down,a.up%a.down,a.down);
else //真分数
printf("%d/%d",a.up,a.down);
}
小礼物走一个哟
0%