打印本文 打印本文  关闭窗口 关闭窗口  
C趣味程序百例(14)将真分数分解为埃及分数
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 13:59:24  文章录入:杜斌  责任编辑:杜斌

45.将真分数分解为埃及分数
    分子为1 的分数称为埃及分数,现输入一个真分数,请将该分数分解为埃及分数。
    如:8/11=1/2+1/5+1/55+1/110。
*问题分析与算法设计
    若真分数的分子a能整除分母b,则真分数经过化简就可以得到埃及分数,若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为b/a+1的埃及分数。用这种方法将剩余部分反复分解,最后可得到结果。
*程序与程序注释
#include<stdio.h>
void main()
{
    long int a,b,c;
    printf("Please enter a optional fraction(a/b):");
    scanf("%ld/%ld",&a,&b);           /*输入分子a和分母b*/
    printf("It can be decomposed to:");
    while(1)
    {
        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;}
    }
}
*运行结果
    1. Please enter a optional fraction (a/b): 1/6
        It can be decomposed to: 1/6
    2. Please enter a optional fraction (a/b): 20/33
        It can be decomposed to: 1/2+1/10+1/165
    3. Please enter a optional fraction (a/b): 10/89
        It can be decomposed to: 1/9+1/801
    4. Please enter a optional fraction (a/b): 19/99
        It can be decomposed to: 1/6+1/40+1/3960
    5. Please enter a optional fraction (a/b): 8/89
        It can be decomposed to: 1/11+1/957
打印本文 打印本文  关闭窗口 关闭窗口