本题要求编写程序,计算N个有理数的平均值。
输入第一行给出正整数N(\le≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。
在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
1
#include<bits/stdc++.h> using namespace std; long long lcm(long long a, long long b) { return a*b/__gcd(a,b); } int main() { int n; scanf("%d", &n); long long a[110]; long long b[110]; scanf("%lld/%lld",&a[0],&b[0]); long long mu = b[0]; long long fen = a[0]; for(int i = 1; i < n; i++) { scanf("%lld/%lld",&a[i], &b[i]); long long tmp = mu; mu = lcm(mu, b[i]); a[i] = mu/b[i]*a[i]; fen = mu/tmp*fen; fen += a[i]; //printf("%lld-- %lld\n",fen,mu); long long g = __gcd(fen, mu); fen/=g; mu/= g; } mu = n * mu; long long gg = __gcd(fen, mu); long long xx = fen/gg; long long yy = mu/gg; if(xx == yy) printf("1\n"); else if(xx == 0) printf("0\n"); else if(yy == 1) printf("%lld\n",xx); else printf("%lld/%lld\n",xx,yy); }
