题目 : 给定一个分数,对其进行化解为最简分数。例如分数16/12 答案是 :4 / 3
public class Test01 {
public static void main(String[] args) {
while (true) {
try {
Scanner scanner = new Scanner(System.in);
int zi = scanner.nextInt();
int mu = scanner.nextInt();
System.out.println("答案为 : " + result(zi, mu));
} catch (Exception e) {
System.out.println("输入的格式不正确,请重新输入!");
}
}
}
/**
* 对分数进行化解
*
* @param zi 分子
* @param mu 分母
* @return result
*/
private static String result(int zi, int mu) {
//判断 分子分母是否为0 / 正数 / 负数
int compareMu = Integer.compare(mu, 0);
int compareZi = Integer.compare(zi, 0);
//如果分母为0
if (compareMu == 0) {
return "分母不能为0";
}
//如果分子为0
if (compareZi == 0) {
return "0";
}
//确定最终结果为负为正
String sign = judeSign(compareMu, compareZi);
//将分子/分母转为正数
zi = Math.abs(zi);
mu = Math.abs(mu);
//将分子分母最小数作为循环次数
int min = Math.min(mu, zi);
int count = min;
while (count > 1) {
//判断分子/分母是否能整除
boolean ziYueShu = getInteger(zi, count);
boolean muYueShu = getInteger(mu, count);
//如果分子/分母均能被整除
if (ziYueShu && muYueShu) {
//更新分子分母数据
zi /= count;
mu /= count;
//更新最小值
min = Math.min(mu, zi);
count = min;
} else {
count--;
}
}
//如果分母为1 则直接输出结果
if (mu == 1) {
return sign + zi;
}
return sign + zi + " / " + mu;
}
/**
* 判断被除数是否能整除
*
* @param dividend 被除数
* @param divisor 除数
* @return 整除返回true 否则返回false
*/
private static boolean getInteger(int dividend, int divisor) {
int resultInt = dividend / divisor;
double resultDouble = (double) dividend / (double) divisor;
return resultInt == resultDouble;
}
/**
* 判断最终结果正负
*
* @param a number1
* @param b number2
* @return 正数返回ture 否则返回false
*/
private static String judeSign(int a, int b) {
return a / b > 0 ? "" : "-";
}
}