二分法c语言程序详解(用C语言实现约分最简分式)
我们都知道,分数一般是可以用“分子/分母”的形式来表示的,当然也可以用小数的形式来表示。
今天这道题目呢,是收录在基础编程题目集当中的第二十四题,它的要求是用户输入一个分数,然后将它约分为最简分式。最简分式指的就是分子和分母不具有可以约分的成分了。
比方说6/12可以约分为1/2,而当分子大于分母时,不需要表达为整数又分数的形式,分子和分母相同时,仍然用1/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;
}
}
}
}
总结
总的来说,这道题目相较于之前的题目而言,难度有所下降,不过这里我用到的求最大公约数的方法是用一个穷举法,后面我会找时间来与大家探讨一下欧几里得算法的使用。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com