题解 | #将真分数分解为埃及分数#
将真分数分解为埃及分数
https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
/**
斐波那契分解因数,a/b=1/(c+1)+(a-d)/(b(c+1)),其中c=b/a,d=b%a
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
// int a = in.nextInt();
// int b = in.nextInt();
// System.out.println(a + b);
String str = in.nextLine();
String[] numStr = str.split("/");
// 分子
int sonNum = Integer.parseInt(numStr[0]);
// 分母
int monNum = Integer.parseInt(numStr[1]);
// 初始化一个字符串
String result = "";
// 判断分子大于分母或者分子小于1或者分母小于2
if(sonNum>monNum||sonNum<1||monNum<2){
// 结束
break;
}
// 计算真分数为埃及分数
while (sonNum!=1) {
// 如果分子分母,能被整除
if(monNum%sonNum==0){
// 分母就是 monNum=monNum/sonNum
monNum = monNum/sonNum;
// 分子 sonNum=1
sonNum=1;
// 跳过循环
continue;
}
// 判断monNum%(sonNum-1)==0,此判断是当5/8 = 4/8 + 1/8===>1/2+1/8,
// 上面的等式是不满足斐波那契的
if(monNum%(sonNum-1)==0){
System.out.print("1/"+monNum/(sonNum-1)+"+");
// 将分子更新为1
sonNum=1;
}else{
// 此判断是满足斐波那契的
// 定义变量c
int c;
// 更新c的值
c = monNum/sonNum + 1;
// 更新分子的值
sonNum = sonNum-monNum%sonNum;
// 更新分母的值
monNum = monNum*c;
System.out.print("1/"+c+"+");
}
}
System.out.println("1/"+monNum);
}
}
}

查看9道真题和解析