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

将真分数分解为埃及分数

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
/**
    斐波那契分解因数,a/b=1/(c+1)+(a-d)/(b(c+1)),其中c=b/a,d=b%a
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            // int a = in.nextInt();
            // int b = in.nextInt();
            // System.out.println(a + b);
            String str = in.nextLine();
            String[] numStr = str.split("/");
            // 分子
            int sonNum = Integer.parseInt(numStr[0]);
            // 分母
            int monNum = Integer.parseInt(numStr[1]);
            // 初始化一个字符串
            String result = "";
            // 判断分子大于分母或者分子小于1或者分母小于2
            if(sonNum>monNum||sonNum<1||monNum<2){
                // 结束
                break;
            }
            // 计算真分数为埃及分数
            while (sonNum!=1) {
                
                // 如果分子分母,能被整除
                if(monNum%sonNum==0){
                    // 分母就是 monNum=monNum/sonNum
                    monNum = monNum/sonNum;
                    // 分子 sonNum=1
                    sonNum=1;
                    // 跳过循环
                    continue;
                }
                // 判断monNum%(sonNum-1)==0,此判断是当5/8 = 4/8 + 1/8===>1/2+1/8,
                // 上面的等式是不满足斐波那契的
                if(monNum%(sonNum-1)==0){
                    System.out.print("1/"+monNum/(sonNum-1)+"+");
                    // 将分子更新为1
                    sonNum=1;
                }else{
                    // 此判断是满足斐波那契的
                    // 定义变量c
                    int c;
                    // 更新c的值
                    c = monNum/sonNum + 1;
                    // 更新分子的值
                    sonNum = sonNum-monNum%sonNum;
                    // 更新分母的值
                    monNum = monNum*c;
                    System.out.print("1/"+c+"+");
                } 
                
            }
            System.out.println("1/"+monNum);
        }
    }
}

全部评论
鉴于好多题解分享的代码运行不成功,我更新一个最新的
点赞 回复 分享
发布于 2023-04-04 12:41 北京

相关推荐

12-23 18:51
中南大学 Java
唉又萌混过关:是不是那种收钱盖实习章的机构?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务