//
// main.cpp
// PATA1081
//
// Created by Phoenix on 2018/2/19.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
struct node{
long long a, b;
};
long long gcd(long long x, long long y) {
long long c;
while(x % y != 0) {
c = y;
y = x % y;
x = c;
}
return y;
}
node simply(node x) {
if(x.b < 0) {
x.a *= -1;
x.b *= -1;
}
if(x.a == 0) {
x.b = 1;
}else {
long long k = gcd(x.a, x.b);
x.a /= k;
x.b /= k;
}
return x;
}
node add(node a, node b){
node ans;
ans.a = a.a * b.b + a.b * b.a;
ans.b = a.b * b.b;
ans = simply(ans);
return ans;
}
int main(int argc, const char * argv[]) {
int n;
scanf("%d", &n);
node num[n], ans;
ans.a = 0; ans.b = 1;
for(int i = 0; i < n; i++) {
scanf("%lld/%lld", &num[i].a, &num[i].b);
num[i] = simply(num[i]);
ans = add(ans, num[i]);
}
if(ans.a == 0) printf("0");
else if(abs(ans.a) < ans.b) printf("%lld/%lld", ans.a, ans.b);
else {
printf("%lld", ans.a / ans.b);
if(ans.a % ans.b != 0){
printf(" %lld/%lld", ans.a % ans.b, ans.b);
}
}
return 0;
}
PATA1081题解
最新推荐文章于 2021-08-18 20:30:11 发布