本题要求编写程序,计算N个有理数的平均值。
输入格式:
输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …
的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。
输出格式:
在一行中按照a/b
的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
#include<stdio.h>
int main()
{
int n, k;
scanf("%d", &n);
int a = 0, b = 0, sum1 = 0, sum2 = 0,i=0;
for (i = 0; i < n; i++)
{
scanf("%d/%d", &a, &b);
if (sum2 == 0)
{
sum2 = a;
sum1 = b;
}
else //1/2+3/4=(1*4+2*3)/2*4
{
sum2 = sum2 * b + a * sum1;
sum1 = sum1 * b;
}
}
if (i = n - 1)//求均值
{
sum1 *= n;
}
if (sum2 % sum1 == 0)//如果是整数(包括1)直接输出分子
{
printf("%d", sum2 / sum1);
}
else { //化简
k = sum2 > sum1 ? sum1 : sum2;
while (sum2 % k != 0 || sum1 % k != 0)
{
k--;
}
sum2 /= k;
sum1 /= k;
printf("%d/%d", sum2, sum1);
}
return 0;
}
这个代码可以正常输出,但是存在一个“不及时化简,可能会溢出”的情况尚未解决