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); } } } }
相关文章推荐
- PAT 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20) 辗转相除法, 分数运算
- 1081. Rational Sum (20)
- [PAT]1081 Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- PAT 1081. Rational Sum(20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- PAT (Advanced) 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- PAT 1081. Rational Sum (20)(分数加法)(待修改)
- PAT 甲级 1081. Rational Sum (20)
- 1081. Rational Sum (20) PAT甲级
- PAT 1081. Rational Sum (20)
- PAT Advanced Level 1081. Rational Sum (20)
- 1081. Rational Sum (20)
- 1081. Rational Sum (20)