7-35 有理数均值 (20分)

最后一个点通不过

#include<stdio.h>
struct num
{
    int a;
    int b;
}num;

int gcd(int a ,int b);




int main(void)
{
    int sum = 0;
    int add = 0;
    int n = 0;
    int fac = 0;
    struct num t[101];
    

    scanf("%d\n", &n);

    //input
    for(int i = 0; i < n; i++)
    {
        scanf("%d/%d ", &t[i].a, &t[i].b);
    }

    if(n == 1)
    {
    
        if(t[0].a == 0)
            printf("0\n");
        else
        {
            fac = gcd(t[0].b, t[0].a);
            t[0].a /= fac;
            t[0].b /= fac;

            if(t[0].a % t[0].b == 0)
                printf("%d\n", t[0].a);
            else
                printf("%d/%d", t[0].a, t[0].b);
        }
    }
    else
    {
        sum = t[0].a;
        add = t[0].b;
        for(int j = 1; j < n; j++)
        {
            sum = sum * t[j].b + add * t[j].a;
            add = add * t[j].b;

            fac = gcd(t[j].b, t[j].a);

            sum /= fac;
            add /= fac;
        }

        add = add * n;
        fac = gcd(add, sum);

        sum /= fac;
        add /= fac;

        if(add == 1)
            printf("%d\n", sum);
        else
            printf("%d/%d\n", sum, add);
    }

    return 0;
}

int gcd(int a ,int b) //求最大公约数
{
    if(a % b == 0)
        return b;
    else
        return gcd(b, a % b);
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值