PAT 엘리베이터 경기 L1-009.N 개수 구화 [시뮬레이션]

4976 단어
제목 링크
https://www.patest.cn/contests/gplt/L1-009
사고방식은 한 걸음 한 걸음 위로 올라가지만 넘침을 고려해야 하기 때문에 LONG LONG을 사용하고 한 걸음 한 걸음 약분을 해야만 넘치지 않도록 보증할 수 있다. 마지막으로 정수 부분과 분자 부분이 모두 0인 상황을 고려해야 한다.
AC 코드
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
typedef long long LL;

const double PI = 3.14159265358979323846264338327;
const double E = 2.718281828459;
const double eps = 1e-6;

const int MAXN = 0x3f3f3f3f;
const int MINN = 0xc0c0c0c0;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7;

LL gcd(LL x, LL y)
{
    LL r;
    while (1)
    {
        r = x % y;
        if (r == 0)
            break;
        x = y;
        y = r;
    }
    return y;
}

int main()
{
    int n;
    cin >> n;
    LL a, b, c, d;
    scanf("%lld/%lld", &a, &b);
    for (int i = 1; i < n; i++)
    {
        scanf("%lld/%lld", &c, &d);
        LL temp = b * d /gcd(b, d);
        a *= (temp / b);
        a += (c * (temp / d));
        b = temp;
        temp = gcd(a, b);
        a /= temp;
        b /= temp;
    }
    LL vis = a / b;
    a %= b;
    if (vis)
    {
        printf("%lld", vis);
        if (a)
        {
            if (vis < 0 && a > 0)
                a *= -1;
            printf(" %lld/%lld", a, abs(b));
        }
    }
    else if(a) 
    {
        if (b < 0 && a > 0)
            a *= -1, b *= -1;
        printf("%lld/%lld", a, abs(b));
    }
    else 
        cout << 0 ;
    cout << endl;
}

전재 대상:https://www.cnblogs.com/Dup4/p/9433268.html

좋은 웹페이지 즐겨찾기