int main()
{
int a;
int b;
int c;
int i;
int j;
int k;
printf("input : ");
scanf("%d/%d",&a,&b); //输入分子a和分母b
printf("output : ");
while(1)
{
if(a%b) //分子不能整除分母
c = b/a+1; //分解出一个分母为b/a+1的埃及分数
else //分子不能整除分母
{
c = b/a;
a = 1; //分子为1时跳出
printf("%d/%d\n",a,c);
break;}
printf("1/%d+",c);
i = b;
b = lcm(b,c); //求出原分数和埃及分数通分后的分母
a = b/i*a-1*b/c; //求出通分后的分子
if(a == 1) //分子为1时跳出
{
printf("%d/%d",a,b);
break;
}
if(a == 3) //分子为3时跳出
{
printf("1/%d+1/%d",b/2,b);
break;
}
}
}
lcm(int a,int b) //求最小公倍数
{
int c;
int d;
int e;
if(a<b)
{
e = a;
a = b;
b = e;
}
c = a;
d = b;
while(d != 0)
{
e = c%d;
c = d;
d = e;
}
return (a*b/c);
}
在写程序时要注意变量的变化,例:
i = b;
b = lcm(b,c);
a = b/i*a-1*b/c;
这里要将b赋值给i,避免之后的计算通分后分子时由于b发生变化导致计算错误
if(a == 3) //分子为3时跳出
{
printf("1/%d+1/%d",b/2,b);
break;
}
除了a==1时,当分子为3时,也可以跳出程序,输出的分数为1/(b/2),1/b,此两分数相加为3/b。