#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Fraction
{
ll up;
ll down;
};
ll gcd(ll a,ll b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
Fraction reduction(Fraction a)
{
if(a.down < 0)
{
a.up = -a.up;
a.down = -a.down;
}
if(a.up == 0)
a.down = 1;
else
{
int d = gcd(abs(a.up),abs(a.down));
a.up /= d;
a.down /= d;
}
return a;
}
Fraction add(Fraction a,Fraction b)
{
Fraction result;
result.up = a.up*b.down+b.up*a.down;
result.down = a.down*b.down;
reduction(result);
return result;
}
Fraction sub(Fraction a,Fraction b)
{
Fraction result;
result.up = a.up*b.down-b.up*a.down;
result.down = a.down*b.down;
reduction(result);
return result;
}
Fraction div(Fraction a,Fraction b)
{
Fraction result;
result.up = a.up*b.down;
result.down = a.down*b.up;
reduction(result);
return result;
}
Fraction multi(Fraction a,Fraction b)
{
Fraction result;
result.up = a.up*b.up;
result.down = a.down*b.down;
reduction(result);
return result;
}
void ShowFraction(Fraction a)
{
a = reduction(a);
if(a.up<0)
printf("(");
if(a.down == 1)
printf("%lld",a.up);
else if(abs(a.up) > a.down)
printf("%lld %lld/%lld",a.up/a.down,abs(a.up)%a.down,a.down);
else
printf("%lld/%lld",a.up,a.down);
if(a.up<0)
printf(")");
}
int main()
{
Fraction a,b,sum;
sum.up = 0;
sum.down = 1;
scanf("%lld/%lld %lld/%lld",&a.up,&a.down,&b.up,&b.down);
//加法
ShowFraction(a);
printf(" + ");
ShowFraction(b);
printf(" = ");
ShowFraction(add(a,b));
printf("\n");
//减法
ShowFraction(a);
printf(" - ");
ShowFraction(b);
printf(" = ");
ShowFraction(sub(a,b));
printf("\n");
//乘法
ShowFraction(a);
printf(" * ");
ShowFraction(b);
printf(" = ");
ShowFraction(multi(a,b));
printf("\n");
//除法
ShowFraction(a);
printf(" / ");
ShowFraction(b);
printf(" = ");
if(b.up == 0)
printf("Inf");
else
ShowFraction(div(a,b));
printf("\n");
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交