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
网友评论