输入样例1:
5
2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2
4/3 2/3
输出样例2:
2
输入样例3:
3
1/3 -1/6 1/8
输出样例3:
7/24
这是使用递归的另一种计算最大公约数的方法。
如果 b 为0,则返回 a;否则,递归调用 gcd(b, a % b)。
这段代码与上面的循环方法实现的功能相同,但使用了不同的逻辑结构
java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();long sumFenzi = 0; // 总分子long sumFenmu = 1; // 总分母for (int i = 0; i < N; i++) {String[] fraction = scanner.next().split("/");long fenzi = Long.parseLong(fraction[0]);long fenmu = Long.parseLong(fraction[1]);// 分数相加sumFenzi = sumFenzi * fenmu + fenzi * sumFenmu;sumFenmu *= fenmu;// 简化分数long gcd = gcd(sumFenzi, sumFenmu);sumFenzi /= gcd;sumFenmu /= gcd;}// 输出格式化结果printFraction(sumFenzi, sumFenmu);}private static long gcd(long a, long b) {
// return b == 0 ? a : gcd(b, a % b);while(a % b != 0){long mod = a % b;a = b;b = mod;}return b;}private static void printFraction(long a, long b) {if (a % b == 0) { // 整数System.out.println(a / b);} else if (Math.abs(a) > b) { // 带分数long integerPart = a / b;long fractionalPart = a % b;System.out.println(integerPart + " " + Math.abs(fractionalPart) + "/" + b);} else { // 纯分数System.out.println(a + "/" + b);}}
}