这应该是一道数学题,通过简单的推导可知,对于一个真分数a/b:
1、如果b%a=0,那显然可以直接转换成一个埃及分数
2、如果b%a !=0,那么我们应该找到一个与a/b足够接近且小于a/b的埃及分数1/k,即1/(k-1)<a/b<1/k,此时二者的差值为a/b-1/k=(a*k-b)/(b*k)
3、对于这个新的真分数(a*k-b)/(b*k),取a=a*k-b,b=b*k,重复上面两步进行迭代,直至b%a=0
tips:b和a应该设为long型,以便有足够多的迭代空间,尽可能的得到结果
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String line = sc.nextLine();
String[] s = line.split("/");
long a = Integer.parseInt(s[0]);
long b = Integer.parseInt(s[1]);
if (b % a == 0) { //b与a是倍数关系,可直接转换成埃及分数
b = b / a;
a = 1;
System.out.println(a + "/" + b);
} else { //b与a不是倍数关系,找到与其最接近的埃及分数1/k,并取二者差值进行迭代
StringBuilder sb = new StringBuilder();
while (b % a != 0) {
long k = b / a + 1;
a = a * k - b;
b = b * k;
sb.append(1 + "/" + k + "+");
}
b = b / a;
a = 1;
sb.append(a + "/" + b);
System.out.println(sb);
}
}
}
}

京公网安备 11010502036488号