将真分数分解为埃及分数

2021-10-24  本文已影响0人  一路向后

1.问题描述

现输入一个真分数,请将该分数分解为埃及分数。

2.问题分析

真分数: 分子比分母小的分数,叫做真分数。
分子为1的分数,叫单位分数。古代埃及人在进行分数运算时,只使用分子是1的分数,因此这种分数也叫做埃及分数,或者叫做单位分子分数。
如: 8/11 = 1/2 + 1/5 + 1/55 + 1/110。
我们约定分子分母都是自然数,分数的分子用a表示,分母用b表示。
若真分数的分子a能整除分母b,则真分数经过化简就可以得到埃及分数;若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为(b/a)+1的埃及分数。用这种方法将剩余部分反复分解,最后可得到结果。

3.源码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int a, b, c;

    printf("请输入一个分数(a/b): ");

    scanf("%d/%d", &a, &b);

    while(1)
    {
        if(b % a != 0)
        {
            c = b / a + 1;
        }
        else
        {
            c = b / a;
            a = 1;
        }

        if(a == 1)
        {
            printf("1/%d\n", c);
            break;
        }
        else
        {
            printf("1/%d + ", c);
        }

        a = a * c - b;
        b = b * c;

        if(a == 3 && b % 2 == 0)
        {
            printf("1/%d + 1/%d\n", b/2, b);
            break;
        }
    }

    return 0;
}

4.编译源码

$ gcc -o test test.c -std=c89

5.运行及其结果

./test
请输入一个分数(a/b): 3/5
1/2 + 1/10
上一篇下一篇

猜你喜欢

热点阅读