newcoder PAT 1001 Rational Sum (20)

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
    return b == 0 ? a: gcd(b,a%b);
}
int s[105];
int x[105];
int main()
{
    int n;
    cin >> n;
    for(int i = 0;i < n; ++i)
    {
        int a,b;
        scanf("%d/%d",&a,&b);
        int g = gcd(a,b);
        s[i] = a/g;
        x[i] = b/g;
    }
    int smallg = 1;
    for(int i = 0;i < n; ++i)
    {
        int g = gcd(smallg,x[i]);
        smallg = smallg * x[i] / g;
    }
    int sum = 0;
    for(int i = 0;i < n; ++i)
    {
        sum += (smallg / x[i])*s[i];
    }
    int g = gcd(sum,smallg);
    sum = sum / abs(g);
    smallg = smallg / abs(g);
    if(sum > 0)
    {
        if(sum % smallg == 0)
        {
            cout << sum / smallg << endl;
        }
        else if(sum / smallg == 0)
            cout << sum % smallg << "/" << smallg << endl;
        else
            cout << sum / smallg << " " << sum % smallg << "/" << smallg << endl;
    }
    else
    {
        if(sum % smallg == 0)
        {
            cout << sum / smallg << endl;
        }
        else if(sum / smallg == 0)
            cout << "-" << (-sum) % smallg << "/" << smallg << endl;
        else
            cout << "-"<< (-sum) / smallg << " " << (-sum) % smallg << "/" << smallg << endl;
    }

}

原文地址:https://www.cnblogs.com/Jawen/p/11108426.html

时间: 2024-08-01 21:02:04

newcoder PAT 1001 Rational Sum (20)的相关文章

1081. Rational Sum (20)【模拟】——PAT (Advanced Level) Practise

题目信息 1081. Rational Sum (20) 时间限制400 ms 内存限制65536 kB 代码长度限制16000 B Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum. Input Specification: Each input file contains one test case. Each case star

pat1081. Rational Sum (20)

1081. Rational Sum (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum. Input Specification: Each input file contains one

A.1081 Rational Sum (20)

1081 Rational Sum (20)(20 分) Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum. Input Specification: Each input file contains one test case. Each case starts with a positive integer N (<=100

[PAT] 1081 Rational Sum (20 分)Java

Given N rational numbers in the form numerator/denominator, you are supposed to calculate their sum. Input Specification: Each input file contains one test case. Each case starts with a positive integer N (≤100), followed in the next line N rational

PAT甲题题解-1081. Rational Sum (20)-模拟分数计算

模拟计算一些分数的和,结果以带分数的形式输出注意一些细节即可 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; /* 模拟计算一些分数的和,结果以带分数的形式输出 注意一些细节即可 */ const int maxn=105; const int maxv=50000

【PAT甲级】1081 Rational Sum (20 分)

题意: 输入一个正整数N(<=100),接着输入N个由两个整数和一个/组成的分数.输出N个分数的和. 代码: #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int a[107],b[107];int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin>>n; for(int i

PAT (Advanced Level) 1081. Rational Sum (20)

简单模拟题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<stack> #include<queue> #include<string> #include<algorithm> using namespace std; struct FenShu { long l

PAT:1081. Rational Sum (20) AC(类似math.h中的sqrt(1.0*n),algorithm的abs()用于取绝对值)

#include<stdio.h> #include<algorithm> using namespace std; typedef long long ll; //[skill]重命名 struct num { ll zi,mu; //分子分母 }; ll gcd(ll a,ll b) //求最大公约数 { return b==0 ? a:gcd(b,a%b); } num yuefen(num a) //分数约分 { //printf("%lld/%lld.约分为:&

A1081. Rational Sum (20)

Given N rational numbers in the form "numerator/denominator", you are supposed to calculate their sum. Input Specification: Each input file contains one test case. Each case starts with a positive integer N (<=100), followed in the next line