真分数分解为埃及分数(HJ82) (不太懂)

C++代码:

#include<iostream>
#include<string>

using namespace std;

int main() 
{
    char ch='0';
    int a = 0;
    int b =0;

    while (cin >> a >> ch >> b)
    {
        while (a != 1) 
        {
            if (b % (a - 1) == 0) 
            {
                cout << 1 << "/" << b / (a - 1) << "+";
                a = 1;
            }
            else 
            {
                int c=0;
                c = b / a + 1;      //新的埃及分数的分母
                a = a - b % a;        //通分后相减得到的分子
                //因为:b=na+x,由通分可得分子为ac-b,c=n+1则分子为na+a-na-x=a-x,而x=b%a,所以分子为a-b%a
                b = b * c;            //通分后的分母
                cout << 1 << "/" << c << "+";
                if (b%a == 0) 
                {      //判断最新得到的是不是埃及分数
                    b = b / a;
                    a = 1;
                }
            }
        }

        cout << 1 << "/" << b << endl;
    }

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/repinkply/p/13406259.html