package go.jacob.day822; import java.util.Scanner; public class Demo1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String[] strs = new String[n]; //三个数分别为分子,分母,带分数的整数部分 int numerator = 0, denominator = 0, first = 0; for (int i = 0; i < n; i++) strs[i] = sc.next(); sc.close(); for (int i = 0; i < n; i++) { int flag = 1, begin = 0; if (strs[i].charAt(0) == '-') { flag = -1; begin = 1; } int tmpNumerator = flag * Integer.parseInt(strs[i].substring(begin, strs[i].indexOf("/"))); int tmpDenominator = Integer.parseInt(strs[i].substring(strs[i].indexOf("/") + 1)); if (tmpDenominator == 0) return; if (i == 0) { numerator = tmpNumerator; denominator = tmpDenominator; } else { numerator = numerator * tmpDenominator + tmpNumerator * denominator; denominator *= tmpDenominator; } // 使用欧几里得算法求最大公约数,每次计算都要对分数进行化简,放置溢出 int factor = gcd(numerator, denominator); if (factor == 0) { System.out.println(0); return; } numerator /= factor; denominator /= factor; } // 把假分数化成带分数 first += numerator / denominator; numerator = numerator % denominator; // 输出结果的时候要判断:整数部分是否为0?分子书否为0? if (first != 0) if (numerator != 0) System.out.println(first + " " + numerator + "/" + denominator); else System.out.println(first); else if (numerator != 0) System.out.println(numerator + "/" + denominator); else System.out.println(0); } private static int gcd(int a, int b) { if (a == 0) return 0; if (a < 0) a = -a; if (b < 0) b = -b; if (a < b) { int tmp = a; a = b; b = tmp; } if (a % b == 0) return b; else return gcd(b, a % b); } }
点赞 评论

相关推荐

点赞 评论 收藏
转发
牛客网
牛客企业服务