1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| typedef long long LL; typedef double DB; const DB eps = 1e-8; #define Sg(u) ((u) > eps ? 1 : ((u) < -eps ? -1 : 0)) #define Abs(u) (Sg(u) >= 0 ? (u) : -(u))
LL gcd(LL a, LL b) { return b ? gcd(b, a%b) : a; }
void print(LL x, LL y) { if(!x || !y){ printf("%s", x ? "Inf" : "0"); return; } int flag = Sg(Sg(x)*Sg(y)); x = Abs(x) * flag; y = Abs(y);
if(flag<0) printf("("); if(x/y) printf("%lld", x/y); if(x%y) { LL t = Abs(gcd(x, y)); if(x/y){ x = Abs(x%y); printf(" "); } printf("%lld/%lld", x/t, y/t); } if(flag<0) printf(")"); }
int main() { LL x1, x2, y1, y2; scanf("%lld/%lld %lld/%lld", &x1, &x2, &y1, &y2);
print(x1, x2); printf(" + "); print(y1, y2); printf(" = "); print(x1*y2+x2*y1, x2*y2); printf("\n");
print(x1, x2); printf(" - "); print(y1, y2); printf(" = "); print(x1*y2-x2*y1, x2*y2); printf("\n");
print(x1, x2); printf(" * "); print(y1, y2); printf(" = "); print(x1*y1, x2*y2); printf("\n");
print(x1, x2); printf(" / "); print(y1, y2); printf(" = "); print(x1*y2, x2*y1); printf("\n");
return 0; }
|