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

本题要求编写程序,计算N个有理数的平均值。

输入格式:
输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。

输出格式:
在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

输入样例1:
4
1/2 1/6 3/6 -5/10

输出样例1:
1/6

输入样例2:
2
4/3 2/3

输出样例2:
1

#include<stdio.h>
int yuefen(int A, int B) {
    
      //函数,完成约分动作
	int c, d, e;
	if (A >= B) {
    
    
		c = A;
		d = B;
	}
	else {
    
    
		c = B;
		d = A;
	}
	e = d;
	while (e != 0) {
    
    
		e = c % d;
		c = d;
		d = e;
	}
	return c;
}
int main() {
    
    
	int N;
	int a[1001], b[1001];
	int i, A = 0, B = 1, c;
	scanf_s("%d", &N);
	for (i = 1; i <= N; i++)
		scanf_s("%d/%d", &a[i], &b[i]);
	for (i = 1; i <= N; i++) {
    
    
		A = A * b[i] + a[i] * B;
		B = B * b[i];
		c = yuefen(A, B);  //随时约分,避免溢出
		A /= c;
		B /= c;
	}
	B = B * N;   //完成平均处理
	c = yuefen(A, B);   
	A /= c;
	B /= c;
	if (B == 1)
		printf("%d\n", A);
	else
		printf("%d/%d\n", A, B);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_46200758/article/details/104156226
今日推荐