正文

45.将真分数分解为埃及分数2005-09-10 15:14:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xiangyu/1695.html

分享到:

45.将真分数分解为埃及分数
分子为1 的分数称为埃及分数,现输入一个真分数,请将该分数分解为埃及分数。
如:8/11=1/2+1/5+1/55+1/110。

*问题分析与算法设计
若真分数的分子a能整除分母b,则真分数经过化简就可以得到埃及分数,若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为b/a+1的埃及分数。用这种方法将剩余部分反复分解,最后可得到结果。

*程序与程序注释
/*安安注:对源程序作稍许修改,主要是添加了一个外循环,可以直接计算多个真分数的埃及分数,按Ctrl-C退出。具体的算法我没有认真看,有问题请提出,谢谢*/

#include<stdio.h>
int main(void)
{
    long int a,b,c;
    while(true)
    {
        printf("Please enter a optional fraction(a/b):");
        scanf("%ld/%ld",&a,&b); /*输入分子a和分母b*/
        printf("It can be decomposed to:");
        while(true)
        {
            if(b%a) /*若分子不能整除分母*/
                c=b/a+1; /*则分解出一个分母为b/a+1的埃及分数*/
            else{ c=b/a; a=1;} /*否则,输出化简后的真分数(埃及分数)*/
            if(a==1)
            {
                printf("1/%ld\n",c);
                break; /*a为1标志结束*/
            }
            else
                printf("1/%ld + ",c);
            a=a*c-b; /*求出余数的分子*/
            b=b*c; /*求出余数的分母*/
            if(a==3) /*若余数为3,输出最后两个埃及分数*/
            { printf("1/%ld + 1/%ld\n",b/2,b); break;}
        }
    }
   
    return 0;
}

*运行结果
 Please enter a optional fraction (a/b): 1/6
It can be decomposed to: 1/6
 Please enter a optional fraction (a/b): 20/33
It can be decomposed to: 1/2+1/10+1/165
 Please enter a optional fraction (a/b): 10/89
It can be decomposed to: 1/9+1/801
 Please enter a optional fraction (a/b): 19/99
It can be decomposed to: 1/6+1/40+1/3960
Please enter a optional fraction (a/b): 8/87
It can be decomposed to: 1/11+1/957
……(按ctrl-c退出)

阅读(4412) | 评论(7)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册