请个位大佬帮忙看一下,样例全过,但测试点全错。
#include <bits/stdc++.h>
using namespace std;
struct fra
{
int x, y;
};
int gcd(int a, int b)
{
if (b == 0)
{
return a;
}
return gcd(b, a % b);
}
int lcm(int a, int b)
{
int fac, mul;
fac = a * b;
mul = gcd(max(a, b), min(a, b));
return fac / mul;
}
fra fra_add(int a1, int b1, int a2, int b2)
{// 分数加法
fra add;
int t1, t2, lc;
t1 = b1;
t2 = b2;
lc = lcm(max(b1, b2), min(b1, b2));
a1 *= lc / t1;
a2 *= lc / t2;
add.x = a1 + a2;
add.y = lc;
return add;
}
fra fra_sub(int a1, int b1, int a2, int b2)
{// 分数减法
fra sub;
int t1, t2, lc;
t1 = b1;
t2 = b2;
lc = lcm(max(b1, b2), min(b1, b2));
a1 *= lc / t1;
a2 *= lc / t2;
sub.x = a1 - a2;
sub.y = lc;
return sub;
}
int main()
{
int n;
cin >> n;
int a[n], b[n], o[n];
cin >> a[0] >> b[0] >> o[0];
for (int i = 1; i < n; i++)
{
cin >> a[i] >> b[i] >> o[i];
if (o[i] == 1)
{
a[i] = fra_add(a[i - 1], b[i - 1], a[i], b[i]).x;
b[i] = fra_add(a[i - 1], b[i - 1], a[i], b[i]).y;
}
else
{
a[i] = fra_sub(a[i - 1], b[i - 1], a[i], b[i]).x;
b[i] = fra_sub(a[i - 1], b[i - 1], a[i], b[i]).y;
}
}// 边输入 边计算
int mul = gcd(a[n - 1], b[n - 1]);
if (mul == 1)
{
a[n - 1] /= mul;
b[n - 1] /= mul;
}
if (a[n - 1] % b[n - 1] == 0)
{
cout << a[n - 1] / b[n - 1] << endl;
}
else
{
cout << a[n - 1] << "/" << b[n - 1] << endl;
}
return 0;
}