计算分数

在这里插入图片描述
题解:此题难度不大,但是时考验做题细心的经典题型,我们只需要循环输入两个数即可,也不需要用到字符串的知识,计算时也不需要考虑正负号,巧妙得用格式化输入输出来处理。
需要考虑的点:
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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值