7-35 有理数均值 (20分)
程序员文章站
2022-06-13 15:46:58
...
最后一个点通不过
#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);
}