題解:此題難度不大,但是時考驗做題細心的經典題型,我們只需要循環輸入兩個數即可,也不需要用到字符串的知識,計算時也不需要考慮正負號,巧妙得用格式化輸入輸出來處理。
需要考慮的點:
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;
}