题解 | #将真分数分解为埃及分数#
将真分数分解为埃及分数
https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b
import java.util.*;
import java.io.*;
public class Main {
private static StringBuilder sb = null;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while ((str = br.readLine()) != null) {
String[] arr = str.split("/");
int a = Integer.parseInt(arr[0]);
int b = Integer.parseInt(arr[1]);
sb = new StringBuilder();
//b=a*p+q, q<a; 故a/b最大可减去一个1/(p+1);
//a/b-1/(p+1) = (a(p+1)-b)/b(p+1)=(ap+a-b)/b(p+1)=(b-q+a-b)/b(p+1)=(a-q)/b(p+1)
boolean flag = true;
while (a != 1) {
int p = b / a;
int q = b % a;
if (q == 0) {
sb.append("1/" + p + "\n");
flag = false;
break;
}
//为什么要用a-1暂未理解,此处不加无法通过17/73的用例
if (b % (a - 1) == 0) {
sb.append("1/" + (b / (a - 1)) + "+");
break;
}
sb.append("1/" + (p + 1) + "+");
// System.out.println("1/" + (p + 1) + "+");
b = b * (p + 1);
a = a - q;
// System.out.println("b:" + b + " a:" + a);
}
if (flag) {
sb.append("1/" + b + "\n");
}
}
System.out.println(sb.toString());
}
}
OPPO公司福利 1210人发布