您的位置:首页 > 其它

1081. Rational Sum (20)

2015-01-12 22:06 309 查看
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 void main(String[] args) {
Scanner scanner = new Scanner(System.in).useDelimiter("[\\s/]");
int n = Integer.parseInt(scanner.nextLine());
Rational[] list = new Rational
;
for(int i = 0; i < n; i ++) {
list[i] = new Rational();
list[i].n = BigInteger.valueOf(scanner.nextLong());
list[i].d = BigInteger.valueOf(scanner.nextLong());
}

Rational sum = list[0];
for(int i = 1; i < n; i ++) {
sum = add(sum, list[i]);
}

if(sum.n.equals(BigInteger.ZERO)) {
System.out.println("0");
}
else {
boolean sign = true;
if(sum.d.compareTo(BigInteger.ZERO) < 0) {
sum.d.negate();
sign = false;
}
BigInteger gcd = sum.n.gcd(sum.d);
sum.n = sum.n.divide(gcd);
sum.d = sum.d.divide(gcd);

BigInteger[] r = sum.n.divideAndRemainder(sum.d);

if(!r[0].equals(BigInteger.ZERO)) {
if(!sign) {
System.out.print('-');
}
System.out.print(r[0]);
if(!r[1].equals(BigInteger.ZERO))
System.out.print(' ');
}
if(!r[1].equals(BigInteger.ZERO)) {
if(!sign) {
System.out.print('-');;
}
System.out.print(r[1]);
System.out.print('/');;
System.out.print(sum.d);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: