计算分数
程序员文章站
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;
}