埃及分数

问题描述:将一个真分数用埃及分数表示

代码示例:

 1 //埃及分数
 2 //问题描述:输入真分数a,b分别作分子分母(a<b),用埃及分数相加的形式表示出来
 3 #include<stdio.h>
 4 int a,b;
 5 
 6 int is_zfs(int x,int y)  //判断是否为真分数,分子为1即是
 7 {
 8     return x==1?1:0;
 9 }
10 
11 int gcd(int a,int b)    //递归方式求最大公约数,用的还是辗转相除
12 {
13     return b==0?a:gcd(b,a%b);
14 }
15 
16 void simple(int *a,int *b)   //对新得到的真分数进行约分简化
17 {
18     int g=gcd(*a,*b);        //得到a和b的最大公约数
19     *a/=g;
20     *b/=g;
21 }
22 
23 int main()
24 {
25     printf("输入分子分母的值用空格格开:");
26     while(scanf("%d%d",&a,&b)==2)
27     {
28         printf("%d/%d=",a,b);
29         while(1)
30         {
31             if(is_zfs(a,b))            //如果约分化简后为埃及分数,结束
32             {
33                 printf("%d/%d\n",a,b);
34                 break;
35             }
36             
37             for(int i=2;a*i<=b;i++);//a*i<=b 等价于a/b<=1/i,这里是要第一个比a/b小的真分数
38             printf("1/%d+",i);
39             a=a*i-b;                //下面两句是对a/b-1/i的通分
40             b=b*i;
41             simple(&a,&b);
42         }
43         printf("输入分子分母的值用空格格开:");
44     }
45     return 0;
46 }

运行结果:

 

 参考链接:https://blog.csdn.net/huang1600301017/article/details/81022704?

posted @ 2020-04-18 21:40  kakusan  阅读(282)  评论(0编辑  收藏  举报