题目
思路
分数处理题,考察最小公倍数和最大公因数,以及同分
代码
#include <iostream>
using namespace std;
long long MaxCommonDivisor(long long a, long long b) {
if (b == 0) return a;
return MaxCommonDivisor(b, a % b);
}
long long MinCommonMutiple(long long a, long long b) {
long long d = MaxCommonDivisor(a, b);
return (a / d) * b;
}
int main()
{
int n;
cin >> n;
long long all_up = 0, all_down = 1;
for (int i = 0; i < n; ++i) {
long long up, down;
scanf_s("%lld/%lld", &up, &down);
if (up == 0 || down == 0)
continue;
if (i == 0) {
all_up = up;
all_down = down;
}
else {
//求最小公倍数
long long min = MinCommonMutiple(all_down, down);
all_up = all_up * (min / all_down) + up*(min / down);
all_down = min;
}
}
//最小化
long long min = MaxCommonDivisor(all_up,all_down);
all_up /= min;
all_down /= min;
if (all_up == 0) {
cout << "0";
return 0;
}
long long inter = all_up / all_down;
if (inter != 0){
all_up %= all_down;
if(all_up!=0)
cout << inter <<" ";
else
cout << inter;
}
if (all_up!= 0) {
cout << all_up <<"/"<<all_down;
}
}