L1-009 N个数求和 (20分)
本题的要求很简单,就是求N
个数字的和。麻烦的是,这些数字是以有理数分子/分母
的形式给出的,你输出的和也必须是有理数的形式。
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805133597065216
很简单的一道题目,奈何坑比较多。。。。。
分享一下做题总结出来的测试点:
1
-50/1000
结果:-1/20
3
0/1 0/1 0/1
结果:0
5
-1/2 -1/2 -1/2 -1/2 -1/2
结果 :-2 -1/2
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b); //最大公因数
}
int main()
{
int m;
ll a[600],b[600],fm=1;
cin>>m;
for(int i=1;i<=m;i++)
{
scanf("%lld/%lld",&a[i],&b[i]);
fm = fm / gcd(fm,b[i]) * b[i]; //求分母的最小公倍数
}
ll fz =0;
int zs =0;
for(int i=1;i<=m;i++)
{
fz += (fm/b[i])*a[i]; //求出分子
}
ll t = gcd(fabs(fz),fm); //对结果进项化简
fz /= t;
fm /= t;
if(fz%fm==0)
{
cout<<fz/fm;
}
else if(fz>fm)
{
cout<<fz/fm<<' '<<fz%fm<<'/'<<fm;
}
else
{
cout<<fz%fm<<'/'<<fm;
}
}