将真分数分解为埃及分数

描述

分子为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);
    }
}

展示效果:

华为OD机试 - 将真分数分解为埃及分数 (Java 2024 E卷 100分)_java