我在做题时搜过csdn,当时我只有测试点4有失误,但是搜了一圈都没有找到错误点在哪,最后在自己一遍遍的测试中,终于找到了测试点4的bug。
当五个数都是负数时,计算结果可能出错
参考答案:
#include<stdio.h>
long long lcm(long long a,long long b);
long long yue(long long a,long long b);
int main()
{
int ru;
scanf("%d",&ru);
long long signed fenzi[ru];//[1]里面是分子,[2]里面是分母
long long signed fenmu[ru];
int i;
long long lcm1 = 0;
for(i=0;i<ru;i++){
scanf("%lld/%lld",&fenzi[i],&fenmu[i]);
if(i!=0&&ru!=1){
lcm1 = lcm(fenmu[i-1],fenmu[i]);
}else if(ru==1){
lcm1 = fenmu[0];
}
}
long long sum1=0,sum2=lcm1;
long long multiple = 0;
for(i=0;i<ru;i++){
multiple = lcm1 / fenmu[i];
fenzi[i] *= multiple;
sum1 += fenzi[i];
}
if(sum1 > sum2||(sum1<0&&(-sum1)>sum2)){
if(sum1%sum2==0){
printf("%lld",sum1/sum2);
}else{
printf("%lld ",sum1/sum2);
long long quotient =0 ;
quotient = yue(sum1%sum2,sum2);
printf("%lld/%lld",(sum1%sum2)/quotient,sum2/quotient);
}
}else if(sum1 == sum2||(-sum1)==sum2){
printf("%lld",sum1/sum2);
}else if(sum1 == 0){
printf("0");
}else if(sum1 < sum2||(sum1<0&&(-sum1)>sum2)){
long long quotient =0 ;
quotient = yue(sum1,sum2);
printf("%lld/%lld",sum1/quotient,sum2/quotient);
}
return 0;
}
long long lcm(long long a,long long b){
long long min = 0;
min = (a * b)/(yue(a,b));
return min;
}
long long yue(long long a,long long b)
{
if(a%b==0)
return b;
else
return yue(b,a%b);
}