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

将真分数分解为埃及分数

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

/**/
#include <iostream>
using namespace std;
//基本思路是不断找小于等于a/b的最大埃及整数(保证分母从2开始递增),并作差,差值再寻找小于等于差值的最大埃及整数,直到等于0
//由调和数列和为无穷的性质,该方法应该能将任意大于0的整数分解为有限个埃及整数的和
//运行结果最后一项不对,不知道为什么(现在知道了,int改成long int)
int main() {
    long int i,j;
    scanf("%ld/%ld",&i,&j);
    long int k=j/i;;
    while(i){
        while(i*k-j<0){
            k++;
        }
        if(i*k-j>0){
            cout<<1<<"/"<<k<<"+";
            i=i*k-j;
            j=j*k;
            //例子过大时,无效循环太多,这里逃过绝大部分无效循环
            k=j/i;
        }
        else if(i*k-j==0){
            cout<<1<<"/"<<k;
            break;
        }
    }
}

// 64 位输出请用 printf("%lld")

全部评论

相关推荐

酷酷的喜马拉雅山:感觉这比一直在初筛不动的好多了
点赞 评论 收藏
分享
09-21 21:14
门头沟学院
否极泰来来来来:和他说:这里不好骂你,我们加个微信聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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