计算分数

在这里插入图片描述
题解:此题难度不大,但是时考验做题细心的经典题型,我们只需要循环输入两个数即可,也不需要用到字符串的知识,计算时也不需要考虑正负号,巧妙得用格式化输入输出来处理。
需要考虑的点:
1.用公约数进行约分时,要借助参数m将值保存,防止影响第二个分式约分
2.输出时对分子分母相等的单独讨论
3.输出时对分母等于1的单独讨论
4.输出时对分子为零的单独讨论
5.输出时对分母为负数的单独讨论(按分式的写法,符号必须在最前面)

#include<cstdio>
int gcd(int a,int b){//求最大公约数 
	return b==0?a:gcd(b,a%b);
}
int main(){
	int a,b,c,d,m;
	scanf("%d/%d",&a,&b);//读入第一个式子 a/b+c/d
	while(scanf("%d/%d",&c,&d)!=EOF){//读入剩下的式子
	    
	    a=a*d+c*b;//通分得分子 
		b*=d;//通分的分母 
		m=gcd(a,b);
		a/=m;//约分 
		b/=m;//约分 
	} 
	if(a==b){//当分子分母相等时直接输出1 
		printf("1");
	}else if(b==1){
		printf("%d\n",a);//当分母为1时直接输出分子 
	}else if(a==0){//当分子等于零直接输出零 
		printf("0");
	}else{
		if(b<0){
			printf("%d/%d",-a,-b);//当分母为负数时,分子分母要同时取相反数 
		}
		else{
			printf("%d/%d",a,b);
		}
		
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章