PAT(A)1081 Rational Sum (20分)(模拟)
程序员文章站
2022-07-08 22:19:36
...
Sample Input
5
2/5 4/15 1/30 -2/60 8/3
Sample Output
3 1/3
思路:
思路不难,情况比较多,注意输出的格式。
1、整数部分、分数部分都不为0,正常输出。
2、整数部分为0,只输出分数。
3、分数部分为0,只输出整数。
4、整数部分、分数部分都为0,输出0。
我忘了最后一个情况,卡了最后一个点。。。
代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
#define endl '\n'
typedef long long ll;
int main()
{
int n;
cin >> n;
ll x, y;
ll sumx = 0, sumy = 0;
scanf("%lld/%lld", &sumx, &sumy);
for (int i = 1; i < n; ++i)
{
scanf("%lld/%lld", &x, &y);
int f = 1;
if (x < 0)
{
f = -1;
x = -x;
}
if (x == 0) continue;
ll g;
ll sx = sumx * y + f * x * sumy;
sumx = sx;
sumy *= y;
g = __gcd(sumx, sumy);
sumx /= g;
sumy /= g;
}
ll m = sumx / sumy;
sumx %= sumy;
int f = 0;
if (m != 0)
{
printf("%lld", m);
}
if (m != 0 && sumx != 0)
printf(" ");
if (sumx != 0)
printf("%lld/%lld", sumx, sumy);
if (m == 0 && sumx == 0)
{
printf("0");
}
return 0;
}
上一篇: 7快速排序