现在的位置: 首页 > 综合 > 正文

将真分数分解为埃及分数

2013年11月20日 ⁄ 综合 ⁄ 共 1025字 ⁄ 字号 评论关闭
/*
题目.将真分数分解为埃及分数
    分子为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("a=3,b=%ld\n",b);
			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/12 + 1/153 + 1/81702 + 1/163404
*/

抱歉!评论已关闭.