题解 | #将真分数分解为埃及分数#
将真分数分解为埃及分数
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); } }