#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
struct fraction{
ll up,down;
};
ll gcd(ll a,ll b){
return b==0 ? a : gcd(b,a%b);
}
fraction reduction(fraction x){
if(x.up == 0){
x.down = 1;
}else if(x.down < 0){ //!******
x.up=-x.up;
x.down=-x.down;
}else{
int d=gcd(fabs(x.up),fabs(x.down));
x.up/=d;
x.down/=d;
}
return x;
}
void print(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){
// a.up=abs(a.up);
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(")");
}
fraction sum(fraction a,fraction b){
fraction c;
print(a);
printf(" + ");
// printf("%ld/%ld\n",b.up,b.down);
print(b);
printf(" = ");
c.up=a.up*b.down+a.down*b.up;
c.down=a.down*b.down;
c=reduction(c); //传入的局部变量需要改变。
print(c);
}
fraction div(fraction a,fraction b){
fraction c;
print(a);
printf(" / ");
print(b);
printf(" = ");
if(a.up !=0 && b.up !=0){
c.up=a.up*b.down;
c.down=a.down*b.up;
c=reduction(c);
print(c);
}else{
printf("Inf");
}
}
fraction mul(fraction a,fraction b){
fraction c;
print(a);
printf(" * ");
print(b);
printf(" = ");
c.up=a.up*b.up;
c.down=a.down*b.down;
c=reduction(c);
print(c);
}
fraction sub(fraction a,fraction b){
fraction c;
print(a);
printf(" - ");
print(b);
printf(" = ");
c.up=a.up*b.down-b.up*a.down;
c.down=a.down*b.down;
c=reduction(c);
print(c);
}
int main(int argc, char** argv) {
fraction x1,x2;
scanf("%lld/%lld %lld/%lld",&x1.up,&x1.down,&x2.up,&x2.down); //!最后的结果没有化简。
// printf("%ld %ld\n",x2.up,x2.down);
sum(x1,x2); putchar('\n');
sub(x1,x2); putchar('\n');
mul(x1,x2); putchar('\n');
div(x1,x2);
return 0;
}
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
struct fraction{
ll up,down;
};
ll gcd(ll a,ll b){
return b==0 ? a : gcd(b,a%b);
}
fraction reduction(fraction x){
if(x.up == 0){
x.down = 1;
}else if(x.down < 0){ //!******
x.up=-x.up;
x.down=-x.down;
}else{
int d=gcd(fabs(x.up),fabs(x.down));
x.up/=d;
x.down/=d;
}
return x;
}
void print(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){
// a.up=abs(a.up);
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(")");
}
fraction sum(fraction a,fraction b){
fraction c;
print(a);
printf(" + ");
// printf("%ld/%ld\n",b.up,b.down);
print(b);
printf(" = ");
c.up=a.up*b.down+a.down*b.up;
c.down=a.down*b.down;
c=reduction(c); //传入的局部变量需要改变。
print(c);
}
fraction div(fraction a,fraction b){
fraction c;
print(a);
printf(" / ");
print(b);
printf(" = ");
if(a.up !=0 && b.up !=0){
c.up=a.up*b.down;
c.down=a.down*b.up;
c=reduction(c);
print(c);
}else{
printf("Inf");
}
}
fraction mul(fraction a,fraction b){
fraction c;
print(a);
printf(" * ");
print(b);
printf(" = ");
c.up=a.up*b.up;
c.down=a.down*b.down;
c=reduction(c);
print(c);
}
fraction sub(fraction a,fraction b){
fraction c;
print(a);
printf(" - ");
print(b);
printf(" = ");
c.up=a.up*b.down-b.up*a.down;
c.down=a.down*b.down;
c=reduction(c);
print(c);
}
int main(int argc, char** argv) {
fraction x1,x2;
scanf("%lld/%lld %lld/%lld",&x1.up,&x1.down,&x2.up,&x2.down); //!最后的结果没有化简。
// printf("%ld %ld\n",x2.up,x2.down);
sum(x1,x2); putchar('\n');
sub(x1,x2); putchar('\n');
mul(x1,x2); putchar('\n');
div(x1,x2);
return 0;
}