题解 | #将真分数分解为埃及分数#

将真分数分解为埃及分数

https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b

这应该是一道数学题,通过简单的推导可知,对于一个真分数a/b:

1、如果b%a=0,那显然可以直接转换成一个埃及分数

2、如果b%a !=0,那么我们应该找到一个与a/b足够接近且小于a/b的埃及分数1/k,即1/(k-1)<a/b<1/k,此时二者的差值为a/b-1/k=(a*k-b)/(b*k)

3、对于这个新的真分数(a*k-b)/(b*k),取a=a*k-b,b=b*k,重复上面两步进行迭代,直至b%a=0

tips:b和a应该设为long型,以便有足够多的迭代空间,尽可能的得到结果

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            String[] s = line.split("/");
            long a = Integer.parseInt(s[0]);
            long b = Integer.parseInt(s[1]);
            if (b % a == 0) {   //b与a是倍数关系,可直接转换成埃及分数
                b = b / a;
                a = 1;
                System.out.println(a + "/" + b);
            } else {            //b与a不是倍数关系,找到与其最接近的埃及分数1/k,并取二者差值进行迭代
                StringBuilder sb = new StringBuilder();
                while (b % a != 0) {
                    long k = b / a + 1;
                    a = a * k - b;
                    b = b * k;
                    sb.append(1 + "/" + k + "+");
                }
                b = b / a;
                a = 1;
                sb.append(a + "/" + b);
                System.out.println(sb);
            }
        }
    }
}
全部评论
改个错,1/k和a/b关系应该是 `1/k < a/b < 1/(k-1)`
点赞 回复 分享
发布于 2023-06-02 10:48 广东

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务