#include<iostream>
using namespace std;
//最大公约数
long gcd(long a,long b)
{
return b ? gcd(b,a%b) :a;
}
int main()
{
int N = 0;
int a[105] = {}, b[105] = {};
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> a[i];
cin.ignore();
cin >> b[i];
}
long bei = b[0]; //最小公倍数 两数相乘/最大公约数
for (int i = 1; i < N; i++)
{
bei = bei / gcd(bei, b[i]) * b[i];
}
long fenzi = 0;//分母为最小公倍数时 计算分子总和
for (int i = 0; i < N; i++)
{
//分母增大倍数 ,分子也需要同步增大
fenzi += bei / b[i] * a[i];
}
//如果有余数
long long shang = fenzi / bei;//整数部分
long long yu = abs(fenzi % bei);// yu/bei
if (yu==0)
{
cout << shang << endl;
}
else
{
//有余数
if (shang!=0)
{
cout << shang << " ";
}
if (fenzi<0)
{
cout << "-";
}
cout << yu / gcd(bei, yu) << "/" << bei / gcd(bei, yu)<<endl;
}
return 0;
}
PTA L1-009 N个数求和 (20分) C++
最新推荐文章于 2023-04-13 11:19:37 发布