PTA N个数求和 测试点4

我在做题时搜过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);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值