import java.math.BigInteger;
import java.util.Scanner;
import java.util.regex.MatchResult;
class Rational {
BigInteger n, d;
}
public class Main {
public static Rational add(Rational r1, Rational r2) {
BigInteger gcd = r1.d.gcd(r2.d);
BigInteger q1 = r1.d.divide(gcd);
BigInteger q2 = r2.d.divide(gcd);
Rational sum = new Rational();
sum.n = r1.n.multiply(q2).add(r2.n.multiply(q1));
sum.d = r1.d.multiply(q2);
return sum;
}
public static Rational sub(Rational r1, Rational r2) {
Rational r = new Rational();
r.n = r2.n.negate();
r.d = r2.d;
return add(r1, r);
}
public static Rational multiply(Rational r1, Rational r2) {
Rational r = new Rational();
r.n = r1.n.multiply(r2.n);
r.d = r1.d.multiply(r2.d);
return r;
}
public static Rational divide(Rational r1, Rational r2) {
Rational r = new Rational();
r.n = r2.d;
r.d = r2.n;
return multiply(r1, r);
}
public static void printRational(Rational rr) {
Rational r = new Rational();
r.n = rr.n;
r.d = rr.d;
if(r.d.equals(BigInteger.ZERO)) {
System.out.print("Inf");
}
else if(r.n.equals(BigInteger.ZERO)) {
System.out.print("0");
}
else {
if(r.d.compareTo(BigInteger.ZERO) < 0) {
r.n = r.n.negate();
r.d = r.d.negate();
}
boolean sign = r.n.compareTo(BigInteger.ZERO) > 0;
if(!sign) {
r.n = r.n.negate();
}
BigInteger gcd = r.n.gcd(r.d);
r.n = r.n.divide(gcd);
r.d = r.d.divide(gcd);
BigInteger qr[] = r.n.divideAndRemainder(r.d);
if(sign) {
if(qr[0].equals(BigInteger.ZERO)) {
System.out.format("%s/%s", r.n.toString(), r.d.toString());
}
else {
if(!qr[1].equals(BigInteger.ZERO))
System.out.format("%s %s/%s", qr[0].toString(), qr[1].toString(), r.d.toString());
else
System.out.format("%s", qr[0].toString());
}
}
else {
if(qr[0].equals(BigInteger.ZERO)) {
System.out.format("(-%s/%s)", r.n.toString(), r.d.toString());
}
else {
if(!qr[1].equals(BigInteger.ZERO))
System.out.format("(-%s %s/%s)", qr[0].toString(), qr[1].toString(), r.d.toString());
else
System.out.format("(-%s)", qr[0].toString());
}
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in).useDelimiter("[ \r\n/]");
Rational[] list = new Rational[2];
for(int i = 0; i < 2; i ++) {
list[i] = new Rational();
list[i].n = scanner.nextBigInteger();
list[i].d = scanner.nextBigInteger();
}
Rational r[] = new Rational[4];
r[0] = add(list[0], list[1]);
r[1] = sub(list[0], list[1]);
r[2] = multiply(list[0], list[1]);
r[3] = divide(list[0], list[1]);
String op = "+-*/";
for(int i = 0; i < 4; i ++) {
printRational(list[0]);
System.out.format(" %c ", op.charAt(i));
printRational(list[1]);
System.out.print(" = ");
printRational(r[i]);
System.out.println();
}
}
}
1088. Rational Arithmetic (20)
最新推荐文章于 2018-09-01 09:12:34 发布