欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-13 15:46:58
...

最后一个点通不过

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);
}

 

相关标签: pat初级