java如何分数约分
分数约分的实现方法
在Java中实现分数约分,核心是通过计算分子和分母的最大公约数(GCD),然后将两者除以GCD。以下是具体实现步骤:
计算最大公约数(GCD)
使用欧几里得算法递归计算GCD:
public static int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
约分方法实现
通过GCD对分数进行约分,并处理分母为负数的情况:
public static int[] reduceFraction(int numerator, int denominator) {
int gcd = gcd(Math.abs(numerator), Math.abs(denominator));
int reducedNum = numerator / gcd;
int reducedDen = denominator / gcd;
// 确保分母始终为正
if (reducedDen < 0) {
reducedNum *= -1;
reducedDen *= -1;
}
return new int[]{reducedNum, reducedDen};
}
完整示例代码
public class FractionReducer {
public static void main(String[] args) {
int[] fraction = reduceFraction(24, -36);
System.out.println(fraction[0] + "/" + fraction[1]); // 输出: -2/3
}
public static int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
public static int[] reduceFraction(int numerator, int denominator) {
int gcd = gcd(Math.abs(numerator), Math.abs(denominator));
int reducedNum = numerator / gcd;
int reducedDen = denominator / gcd;
if (reducedDen < 0) {
reducedNum *= -1;
reducedDen *= -1;
}
return new int[]{reducedNum, reducedDen};
}
}
处理边界情况
-
当分子为0时,约分结果应为0/1
-
当分母为0时,应抛出异常(数学上无意义)
public static int[] reduceFraction(int numerator, int denominator) { if (denominator == 0) throw new IllegalArgumentException("Denominator cannot be zero"); if (numerator == 0) return new int[]{0, 1}; // 其余逻辑保持不变... }
使用Java内置方法
Java 8+的BigInteger类已提供GCD计算:

import java.math.BigInteger;
public static int gcd(int a, int b) {
return BigInteger.valueOf(a).gcd(BigInteger.valueOf(b)).intValue();
}






