2019年2月16日
11:41
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
typedef struct P
{
LL x;
LL a, b;
}P;
P p[10], ans, t1, t2;
LL gcd(LL a, LL b)
{
return b == 0? a : gcd(b, a % b);
}
P change(P s)
{
P ans = s;
ans.x = 0;
//cout << endl;
//cout << ans.x <<" " << ans.a << " " << ans.b << endl;
if(ans.b < 0)
{
ans.b = -1 * ans.b;
ans.a = -1 * ans.a;
}
//cout << ans.x <<" " << ans.a << " " << ans.b << endl;
LL g = gcd(abs(ans.a), ans.b);
ans.a /= g;
ans.b /= g;
ans.x = ans.a / ans.b;
if(ans.x < 0)
ans.a = abs(ans.a % ans.b);
else
ans.a = ans.a % ans.b;
//cout << ans.x <<" " << ans.a << " " << ans.b << endl;
return ans;
}
void show(P p)
{
if(p.x > 0)
{
cout << p.x ;
if(p.a != 0)
cout << " " << p.a <<"/" << p.b ;
}
else if(p.x == 0)
{
if(p.a == 0)
cout << "0";
else if(p.a > 0)
cout << p.a <<"/" << p.b ;
else
cout << "(" << p.a << "/" << p.b << ")";
}
else
{
cout << "(" << p.x ;
if(p.a != 0)
cout << " " << p.a <<"/" << p.b <<")" ;
else
cout <<")";
}
}
int main()
{
while(scanf("%lld/%lld%lld/%lld",&p[0].a, &p[0].b, &p[1].a, &p[1].b ) != -1)
{
string s1, s2;
t1 = change(p[0]);
t2 = change(p[1]);
ans.a = p[0].a * p[1].b + p[0].b * p[1].a;
ans.b = p[0].b * p[1].b;
ans = change(ans);
show(t1);
cout << " + " ;
show(t2);
cout << " = ";
show(ans);
cout << endl;
ans.a = p[0].a * p[1].b - p[0].b * p[1].a;
ans.b = p[0].b * p[1].b;
ans = change(ans);
show(t1);
cout << " - " ;
show(t2);
cout << " = ";
show(ans);
cout << endl;
ans.a = p[0].a * p[1].a;
ans.b = p[0].b * p[1].b;
ans = change(ans);
show(t1);
cout << " * " ;
show(t2);
cout << " = ";
show(ans);
cout << endl;
ans.a = p[0].a * p[1].b;
ans.b = p[0].b * p[1].a;
show(t1);
cout << " / " ;
show(t2);
cout << " = ";
if(ans.b != 0)
ans = change(ans),show(ans);
else
cout <<"Inf";
cout << endl;
}
return 0;
}