埃及数(java)

将真分数分解为埃及分数

http://www.nowcoder.com/questionTerminal/e0480b2c6aa24bfba0935ffcca3ccb7b

/**
数学家斐波那契提出的一种求解***分数的贪心算法,准确的算法表述应该是这样的:
设某个真分数的分子为a,分母为b;
把c=(b/a+1)作为分解式中第一个***分数的分母;
将a-b%a作为新的a;
将b*c作为新的b;
如果a等于1,则最后一个***分数为1/b,算法结束;
如果a大于1但是a能整除b,则最后一个***分数为1/(b/a),算法结束;
否则重复上面的步骤。
**/
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            String res = "";
            String[] arr = in.nextLine().split("/");
            String pre = "";
            int a = Integer.valueOf(arr[0]);
            int b = Integer.valueOf(arr[1]);
            while (true){
                int c = b/a+1;
                res += "1/";
                res += c;
                a = a - b % a;
                b = b * c;
                res += "+";
                if (a == 1){
                    res += "1/";
                    res += b;
                    break;
                }else if (a > 1 && b % a == 0){
                    res += "1/";
                    res += b/a;
                    break;
                }
            }
            System.out.println(res);
        }
    }
}
全部评论
要把int改成long,不然有部分用例过不去
2 回复 分享
发布于 2022-03-11 16:53
分母过大会变负数,结果不准确
4 回复 分享
发布于 2021-06-03 22:27
研究了半天代码,结果用例不通过
3 回复 分享
发布于 2022-03-09 15:26
哎 说实话,这题如果是考试的话,我没做过,我不会做。
点赞 回复 分享
发布于 2022-04-13 10:12
a = a - b%a 为啥不是 a = a*c -b
点赞 回复 分享
发布于 2022-04-16 22:58
这是什么规律,手动算怎么得不到结果
点赞 回复 分享
发布于 2022-07-22 16:38
我和你想一块了,但是分母变大就不准确了
点赞 回复 分享
发布于 2023-04-21 21:40 云南
考试不会公式,直接输出分子个(1/分母)完事
点赞 回复 分享
发布于 01-02 15:51 北京

相关推荐

昨天 22:55
已编辑
叮咚买菜
牛客吹哨人:建议细说...哨哥晚点统一更新到黑名单:不要重蹈覆辙!25届毁意向毁约裁员黑名单https://www.nowcoder.com/discuss/1317104
叮咚买菜稳定性 10人发布 投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
10-11 17:30
湖南大学 C++
我已成为0offer的糕手:羡慕
点赞 评论 收藏
分享
23 5 评论
分享
牛客网
牛客企业服务