L1-009 N个数求和 (20分) #include <bits/stdc++.h> using namespace std; const int N = 500; const int inf = 0x3f3f3f3f; //找最大公约数 long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); } int main() { long long n, a, b, suma = 0, sumb = 1, gcdvalue; scanf("%lld", &n); for (int i = 0; i < n; i++) { scanf("%lld/%lld", &a, &b); gcdvalue = gcd(suma, sumb); //约分前一个分子和分母 sumb = sumb / gcdvalue; suma = suma / gcdvalue; gcdvalue = gcd(a, b);//约分后一个分子和分母 a = a / gcdvalue; b = b / gcdvalue; suma = a * sumb + suma * b;//求和 sumb = b * sumb; } long long integer = suma / sumb;//求整数部分 suma = suma - (sumb * integer);//分数部分 gcdvalue = gcd(suma, sumb);//分数部分约分 suma = suma / gcdvalue; sumb = sumb / gcdvalue; //输出 if (integer != 0) { printf("%lld", integer); if (suma != 0) printf(" "); } if (suma != 0) { printf("%lld/%lld", suma, sumb); } if (integer == 0 && suma == 0) printf("0"); return 0; }