我们都知道,分数一般是可以用“分子/分母”的形式来表示的,当然也可以用小数的形式来表示。

今天这道题目呢,是收录在基础编程题目集当中的第二十四题,它的要求是用户输入一个分数,然后将它约分为最简分式。最简分式指的就是分子和分母不具有可以约分的成分了。

比方说6/12可以约分为1/2,而当分子大于分母时,不需要表达为整数又分数的形式,分子和分母相同时,仍然用1/1的形式来表达。

二分法c语言程序详解(用C语言实现约分最简分式)(1)

梳理逻辑

1、要输入一个分数,分子和分母之间还有斜杠/分隔,在C语言当中呢,一般是用scanf函数来处理这个斜杠/的,这与我们之前讲的差不多。

2、而至于如何约分呢,这就是这道题目最为关键的地方了,我们都知道给定两个数后,比方说给了题目中的例子66和120,它们的最大公约数是多少,应该是6才对,而6是如何得到的呢,我们都听说过欧几里得算法,也知道这个算法是用来求最大公约数的。

不过呢,要是不知道欧几里得算法也没事,完全可以用穷举法做出这道题目。

因为要求最大公约数,如果我们从1开始数起的话,那只能得到最小公约数也就是1,但如果从120开始数起的话,只要满足小于120中的某个数(且是最大数),能够同时被66和120整除,那很显然,只有6才能满足这个条件,所以就能得到最大公约数为6。

这是分子小于分母的情况,那如果是分母小于分子的情况呢,也是同理的。

代码实现

//约分最简公式 #include <stdio.h> int main() { int a; int b; scanf("%d/%d",&a,&b); if(a>b){ for(int i = a;i>0;i--){ if(a%i==0&&b%i==0){ printf("%d/%d",a/i,b/i); break; } } } if(a<=b){ for(int i=b;i>0;i--){ if(a%i==0&&b%i==0){ printf("%d/%d",a/i,b/i); break; } } } }

结果测试

二分法c语言程序详解(用C语言实现约分最简分式)(2)

二分法c语言程序详解(用C语言实现约分最简分式)(3)

二分法c语言程序详解(用C语言实现约分最简分式)(4)

总结

总的来说,这道题目相较于之前的题目而言,难度有所下降,不过这里我用到的求最大公约数的方法是用一个穷举法,后面我会找时间来与大家探讨一下欧几里得算法的使用。

,