埃及分数
问题描述:将一个真分数用埃及分数表示
代码示例:
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?