hrbust 1178 分数加减(模拟+数论gcd,lcm)

题意是要模拟分数加减。


注意一些判断的细节。


代码:

#include 

int gcd(int a, int b)
{
    if(b == 0) return a;
    return gcd(b, a % b);
}

int lcm(int a, int b)
{
    int c = gcd(a, b);
    return a * b / c;
}

int main()
{
    int a, b, c, d;
    char ch;
    while (scanf("%d/%d%c%d/%d", &a, &b, &ch, &c, &d) != EOF)
    {
        int fenmu = lcm(b, d);
        int fenzi;

        if (ch == '+')
        {
            fenzi = a * (fenmu / b) + c * (fenmu / d);
        }
        else
        {
            fenzi = a * (fenmu / b) - c * (fenmu / d);
        }
        if (fenzi == 0)
        {
            printf("0\n");
        }
        else
        {
            int t = gcd(fenmu, fenzi);
            fenmu /= t;
            fenzi /= t;
            if(fenmu < 0)
            {
                fenzi = -fenzi;
                fenmu = -fenmu;
            }
            if(fenmu == 1)
                printf("%d\n", fenzi);
            else
                printf("%d/%d\n", fenzi, fenmu);
        }
    }
    return 0;
}


你可能感兴趣的:(模拟,数论数学)