代码是这样的,在PAT上测试点3答案错误,放到牛客网上提交就通过了,找不到问题出在哪
#include <iostream>
using namespace std;
struct Fraction{
long long up,down;
};
Fraction frac[110];
int gcd(int a,int b){
return !b ? a : gcd(b,a % b);
}
Fraction reduction(Fraction result){
if(result.down < 0){ // 分母为负数,令分子和分母都变为相反数
result.up = -result.up;
result.down = -result.down;
}
if(result.up == 0){
result.down = 1;
}else{
int d = gcd(abs(result.up),abs(result.down));
result.up /= d;
result.down /= d;
}
return result;
}
Fraction add(Fraction f1,Fraction f2){
Fraction result;
result.up = f1.up * f2.down + f2.up * f1.down;
result.down = f1.down * f2.down;
return reduction(result);
}
int main(){
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++){
scanf("%lld/%lld",&frac[i].up,&frac[i].down);
}
Fraction a = add(frac[0],frac[1]);
for(int i = 2;i < n;i++){
a = add(a,frac[i]);
}
long long integer = a.up / a.down;
a.up = a.up % a.down;
if(integer != 0 && a.up == 0){
printf("%lld",integer);
}else if(integer != 0){
printf("%lld %lld/%lld",integer,a.up,a.down);
}else if(a.up == 0){
printf("0\n");
}else{
printf("%lld/%lld",a.up,a.down);
}
system("pause");
return 0;
}