将真分数分解为埃及分数
描述
分子为1的分数称为埃及分数。现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为不同的埃及分数。如:8/11 = 1/2+1/5+1/55+1/110。
注:真分数指分子小于分母的分数,分子和分母有可能gcd不为1!
如有多个解,请输出任意一个。
输入描述:
输入一个真分数,String型
输出描述:
输出分解后的string
示例1
输出:
输入:
8/11
2/4
输出:
1/2+1/5+1/55+1/110
1/3+1/6
说明:
第二个样例直接输出1/2也是可以的Java 编程
package cn.net.javapub.demo2.demo;
/**
* @author: shiyuwang
*/
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) {
String src = in.nextLine();
String[] param = src.split("/");
long fz = Long.parseLong(param[0]);
long fm = Long.parseLong(param[1]);
long fac = gcd(fz, fm);
fz = fz / fac;
fm = fm / fac;
String res = "";
while (true) {
long c = fm / fz + 1;
fz = fz * c - fm;
fm = fm * c;
res += "1/" + c + "+";
if (fz == 1) {
res += "1/" + fm;
break;
} else if (fz != 1 && fm % fz == 0) {
res += "1/" + (fm / fz);
break;
}
}
System.out.println(res);
}
}
public static long gcd(long a, long b) {
if (a % b == 0) {
return b;
}
return gcd(b, a % b);
}
}展示效果:

















