费劲
#include <iostream>
#include <algorithm>
#include<math.h>
#include<string>
#include<vector>
#include<ctype.h>
#include<set>
using namespace std;
void trunc(long long a, long long b) {
if (a%b == 0) {
if (a <0) {
printf("(%lld)", a / b);
}
else {
printf("%lld", a / b);
}
}
else {
//cout << a << " " << b << endl;
if (abs(a) > abs(b)) {
//cout << a / b << " " << a % b << b << endl;
if (a < 0) {
printf("(%lld %lld/%lld)", (a / b), (abs(a) % b), b);
}
else {
printf("%lld %lld/%lld", (a / b), (a%b), b);
}
}
else {
if (a < 0) {
printf("(%lld/%lld)", a, b);
}
else {
printf("%lld/%lld", a, b);
}
}
}
}
long long gcd(long long a, long long b) {
return b == 0 ? a : gcd(b, a%b);
}
int main() {
#ifdef LOCAL
freopen("D:\\datain.txt", "r", stdin);
#endif
//cout << gcd(2, 4) << endl;
//cout << gcd(6, 15) << endl;
//cout << gcd(1, 8) << endl;
char f;
long long a, b, c, d;
scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);
//cout << a << " " << b << " " << c << " "<<d << endl;
//+
long long t1, t2, gcd1;
t1 = a * d + b * c;
t2 = b * d;
trunc(a, b);
cout << " + ";
trunc(c, d);
cout << " = ";
gcd1 = gcd(abs(t1), t2);
t1 = t1 / gcd1;
t2 = t2 / gcd1;
trunc(t1, t2);
cout << endl;
//-
t1 = a * d - b * c;
t2 = b * d;
trunc(a, b);
cout << " - ";
trunc(c, d);
cout << " = ";
gcd1 = gcd(abs(t1), t2);
t1 = t1 / gcd1;
t2 = t2 / gcd1;
trunc(t1, t2);
cout << endl;
//*
t1 = a * c;
t2 = b * d;
trunc(a, b);
cout << " * ";
trunc(c, d);
cout << " = ";
gcd1 = gcd(abs(t1), t2);
t1 = t1 / gcd1;
t2 = t2 / gcd1;
trunc(t1, t2);
cout << endl;
// /
if (c == 0) {
trunc(a, b);
cout << " / ";
trunc(c, d);
cout << " = Inf\n";
}
else {
trunc(a, b);
cout << " / ";
trunc(c, d);
cout << " = ";
long long c1 = c;
if (c < 0) {
c = -d;
d = abs(c1);
}
else {
c = d;
d = c1;
}
t1 = a * c;
t2 = b * d;
long long gcd1 = gcd(abs(t1), t2);
trunc(t1 / gcd1, t2 / gcd1);
cout << endl;
}
}