2021-10-28

约分最简式

题目:分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。

解析:首先输入分子和分母,通过if()语句判断分子和分母哪个大,如果分子大于分母(或分母大于分子),进行for循环,找到能整除a和b的数,进行约分,最后输出最简约分数。

​
#include<stdio.h>
int main(){
	int i,a,b;
	printf("请输入一个分数:");
	scanf("%d/%d",&a,&b);
	if(a==0){              //如果分子为0,则直接输出0
		printf("0");
		return 0;
	}
	if(a>=b){              //如果分子大于或等于分母
		for(i=b;i>0;i--){
			if(a%i==0&&b%i==0){
				a=a/i;
				b=b/i;
			}
		}
		printf("%d/%d",a,b);
	}
	else                    //如果分子小于分母
	{
		for(i=a;i>0;i--){
			if(a%i==0&&b%i==0){
				a=a/i;
				b=b/i;
			}
		}
		printf("%d/%d",a,b);
	}
	return 0;
}

​

结果测试:

请输入一个分数:66/120
11/20

注意:分子大于分母时,for循环要从分母数开始(分母大于分子时,for循环要从分子开始)而不是从1开始。如果从1开始循环,可能最后不是最简约分式。例如4/8:

if(a>=b){
		for(i=1;i<=b;i++){
			if(a%i==0&&b%i==0){
				a=a/i;
				b=b/i;
			}
		}
		printf("%d/%d",a,b);
	}
	else
	{
		for(i=1;i<=a;i++){
			if(a%i==0&&b%i==0){
				a=a/i;
				b=b/i;
			}
		}
		printf("%d/%d",a,b);
	}

测试结果:

请输入一个分数:4/8
2/4


版权声明:本文为Sjuanye原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。