1081 Rational Sum 题目链接测试点3超时版本,从大到小找最大公约数效率低辗转相除√√√√√ 题目链接 测试点3超时版本,从大到小找最大公约数效率低 #include<iostream> #include<cmath> using namespace std; #pragma warning(disable:4996) long find_max_common_factor(long a, long b) { for (long i = min(a, b); i > 1; i--) if (a % i == 0 && b % i == 0)return i; return 1; } int main() { int n; long nn, dd, sum_n, sum_d; cin >> n ; getchar(); for (int i = 0; i < n; i++) { scanf("%ld/%ld", &nn, &dd); if (i == 0) { sum_n = nn; sum_d = dd; continue; } int flag; nn < 0 ? flag = 1 : flag = 0; nn = abs(nn); long cf = find_max_common_factor(dd, sum_d); long r = max(sum_d, dd) / cf * min(dd, sum_d); if (flag) sum_n = sum_n * (r / sum_d) - nn * (r / dd); else sum_n = sum_n * (r / sum_d) + nn * (r / dd); sum_d = r; } if (sum_n % sum_d != 0) { long cf = find_max_common_factor(sum_n, sum_d); sum_n /= cf; sum_d /= cf; if (sum_n > sum_d) cout << sum_n / sum_d << " " << sum_n % sum_d << "/" << sum_d << endl; else cout << sum_n << "/" << sum_d << endl; } else cout << sum_n / sum_d << endl; return 0; } 辗转相除√√√√√