解题思路是为整数部分设变量f,分数部分设b/c,取得的数据d/e,先取整汇入f,再取余得到新的d,再为d/e约分,再求c和e的最小公倍数,然后求b/c与d/e的和,得到新的b/c并约分,接着下一份数据d/e同上操作(约分时要注意负数的情况,输出时可能的答案样式有:0、1/3、3 1/3、3)
#include<stdio.h>
int main(){
long a,b=0,c=1,d,e,f=0,g,h=0,i,n=0,m;
scanf("%ld",&a);
for(;n<a;n++){
scanf("%ld/%ld",&d,&e);
f+=d/e;
d%=e;
if(d<0){
d=-d;
h=1;
}
for(m=2;m<=d;m++){
if(!(d%m||e%m)){
d/=m;
e/=m;
}
}
if(h){
d=-d;
}
g=c;
h=e;
for(;h;){
i=h;
h=g%h;
g=i;
}
b=b*(e/i)+d*(c/i);
c*=(e/i);
f+=b/c;
b%=c;
if(b<0){
b=-b;
h=1;
}
for(m=2;m<=b;m++){
if(!(b%m||c%m)){
b/=m;
c/=m;
}
}
if(h){
b=-b;
h=0;
}
}
if(f){
printf("%ld",f);
if(b){
printf(" %ld/%ld",b,c);
}
}else{
if(b){
printf("%ld/%ld",b,c);
}else{
printf("0");
}
}
}