模板
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Fraction{
ll up,down;
};
Fraction f1,f2;
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
Fraction reduction(Fraction result){
if(result.down < 0){
result.up = -result.up;
result.down = -result.down;
}
if(result.up==0){
result.down = 1;
}else{
int d = gcd(abs(result.up), abs(result.down));
result.up /=d;
result.down /=d;
}
return result;
}
Fraction add(Fraction f1, Fraction f2){
Fraction result;
result.up = f1.up*f2.down+f2.up*f1.down;
result.down = f1.down * f2.down;
return reduction(result);
}
Fraction sub(Fraction f1,Fraction f2){
Fraction result;
result.up = f1.up*f2.down - f2.up*f1.down;
result.down = f1.down * f2.down;
return reduction(result);
}
Fraction multi(Fraction f1,Fraction f2){
Fraction result;
result.up = f1.up*f2.up;
result.down = f1.down * f2.down;
return reduction(result);
}
Fraction divide(Fraction f1,Fraction f2){
Fraction result;
result.up = f1.up*f2.down;
result.down = f1.down * f2.up;
return reduction(result);
}
void show(Fraction r){
r = reduction(r);
if(r.up<0) printf("(");
if(r.down == 1) printf("%lld",r.up);
else {
if(abs(r.up) > r.down){
printf("%lld %lld/%lld",r.up / r.down,abs(r.up) % r.down,r.down);
}else{
printf("%lld/%lld",r.up,r.down);
}
}
if(r.up<0) printf(")");
}
int main(){
scanf("%lld/%lld %lld/%lld",&f1.up,&f1.down,&f2.up,&f2.down);
show(f1);
printf(" + ");
show(f2);
printf(" = ");
show(add(f1,f2));
printf("\n");
show(f1);
printf(" - ");
show(f2);
printf(" = ");
show(sub(f1,f2));
printf("\n");
show(f1);
printf(" * ");
show(f2);
printf(" = ");
show(multi(f1,f2));
printf("\n");
show(f1);
printf(" / ");
show(f2);
printf(" = ");
if(f2.up==0) printf("Inf");
else show(divide(f1,f2));
printf("\n");
return 0;
}