欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算分数

程序员文章站 2024-02-21 12:24:34
...

计算分数
题解:此题难度不大,但是时考验做题细心的经典题型,我们只需要循环输入两个数即可,也不需要用到字符串的知识,计算时也不需要考虑正负号,巧妙得用格式化输入输出来处理。
需要考虑的点:
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;
}
相关标签: 算法竞赛