計算分數

在這裏插入圖片描述
題解:此題難度不大,但是時考驗做題細心的經典題型,我們只需要循環輸入兩個數即可,也不需要用到字符串的知識,計算時也不需要考慮正負號,巧妙得用格式化輸入輸出來處理。
需要考慮的點:
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章