C趣味程序百例(14)将真分数分解为埃及分数
45.真实分数分解成埃及分数
分子为1的分数称为埃及分数。现在输入真实分数。请把这个分数分解成埃及分数。
例如:8/11=1/2+1/5+1/55+1/110。
*问题分析及算法设计
如果真分数的分子A可以除以分母B,那么真分数就可以简化得到埃及分。如果真实分数的分子不能除以分母,则可以从原始分数中解析出分母为b/a+1的埃及分数。这样就可以反复分解剩下的部分,最后得到结果。
*程序和程序注释
# include
void main()
{
long int a,b,c;
printf("请输入可选分数(a/b):");
scanf("%ld/%ld ",&a,& b);/*输入分子A和分母B */
printf("可以退化为:");
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);打破;}
}
}
*运行结果
1。请输入一个可选分数(a/b): 1/6
它可以降级为:1/6
2。请输入一个可选分数(a/b): 20/33
它可以分解为:1/2+1/10+1/165
3。请输入一个可选分数(a/b): 10/ 89
它可以分解为:1/9+1/801
4。请输入一个可选分数(a/b): 19/99
它可以分解为:1/6+1/40+1/3960[/br/ ] 5。请输入一个可选分数(a/b): 8/89
它可以分解为:1/11+1/957
0条评论