题解 | #将真分数分解为埃及分数#
将真分数分解为埃及分数
https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String string;
StringBuffer bu = new StringBuffer();
char[] chs;
int i, l, n, a, b, p, r;
try {
while ((string = in.readLine()) != null && !string.isEmpty()) {
i = 0;
n = 0;
a = 0;
b = 0;
chs = string.toCharArray();
l = chs.length;
while (i < l) {
if (chs[i] == '/') {
a = n;
n = 0;
i++;
continue;
}
n *= 10;
n += chs[i] - '0';
if (i == l - 1) b = n;
i++;
}
while (a != 1 && !(b % a == 0 && 2 * a < b)) {
if ((b & 1) != 1 &&
a == 3) {//当a=3时,如果分母是偶数,可以直接化简
bu.append("1/").append(b / 2).append("+");
a = 1;
break;
}
if (b % 3 == 0 &&
a == 4) {//当a=4时,如果分母能被3整除数,也可以直接化简
bu.append("1/").append(b / 3).append("+");
a = 1;
break;
}
p = b / a;
r = b % a;
bu.append("1/").append(p + 1).append("+");
a -= r;//更新a
b = b * p + b;//更新b
}
if (a != 1) bu.append("1/").append(b / a).append("\n");
else bu.append("1/").append(b).append("\n");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
System.out.print(bu);
}
}
查看1道真题和解析
