描述blog
輸入n個分數並對他們求和,並用最簡形式表示。所謂最簡形式是指:分子分母的最大公約數爲1;若最終結果的分母爲1,則直接用整數表示。io
如:5/六、10/3均是最簡形式,而3/6須要化簡爲1/2, 3/1須要化簡爲3。class
分子和分母均不爲0,也不爲負數。di
輸入第一行是一個整數n,表示分數個數,1 <= n <= 10;
接下來n行,每行一個分數,用"p/q"的形式表示,不含空格,p,q均不超過10。輸出輸出只有一行,即最終結果的最簡形式。若爲分數,用"p/q"的形式表示。樣例輸入while
2 1/2 1/3
樣例輸出block
5/6
#include<stdio.h> int main() { int a,b,c=0,d=1,n; scanf("%d",&n); while(n--) { scanf("%d/%d",&a,&b); c=a*d+c*b; d*=b; } a=c; b=d; while(a!=b) { a>b?a=a-b:b=b-a; } c/=a; d/=a; if(d!=1) printf("%d/%d",c,d); else printf("%d",c); }
1/8+3/8 1/4-1/2 1/3-1/3
1/2 -1/4 0
#include<stdio.h> #include <math.h> int func(int m,int n) //求最大公約數 { int tmp; m=abs(m); n=abs(n); if(m==n) return m; if(m<n) { tmp=m; m=n; n=tmp; } while(m%n!=0) { tmp=m; m=n; n=tmp%n; } return n; } int main() { int a,b,c,d; //兩個分數的分子和分母 int he,mu,zi; //分母和分子 char o; while(scanf("%d/%d%c%d/%d",&a,&b,&o,&c,&d)!=EOF) { he=func(b,d); //求最大公約數 mu=b*d/he; if(o=='+') zi=a*(mu/b)+c*(mu/d); else zi=a*(mu/b)-c*(mu/d); if(zi!=0) { if(zi/mu==1) { printf("1\n"); } else { if(zi%mu==0) { printf("%d\n",zi/mu); } else { he=func(zi,mu); zi=zi/he; mu=mu/he; printf("%d/%d\n",zi,mu); } } } else printf("0\n"); } return 0; }