longlongGCD(longlong a, longlong b){ return b == 0 ? abs(a) : GCD(b, a % b); }
voidf(longlong a, longlong b){ if (a == 0) { printf("0"); return; } if (b == 0) { printf("Inf"); return; } int flag = (a < 0 && b > 0) || (a > 0 && b < 0); a = abs(a), b = abs(b); longlong integer = a / b; if (flag) { printf("(-"); } if (integer) { printf("%lld", integer); } if (a % b == 0) { if (flag) { printf(")"); } return; } if (integer != 0) { printf(" "); } longlong gcdval = GCD(a, b); a = a - integer * b; a = a / gcdval, b = b / gcdval; printf("%lld/%lld", a, b); if (flag) { printf(")"); } // printf("%lld/%lld%s", m, n, flag ? ")" : ""); 也很不错 }
intmain(){ scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d); f(a, b); printf(" + "); f(c, d); printf(" = "); f(a * d + b * c, b * d); printf("\n");
f(a, b); printf(" - "); f(c, d); printf(" = "); f(a * d - b * c, b * d); printf("\n");