https://www.nowcoder.com/pat/2/problem/261 分数运算 1012
思路:
分子与分母互质,只需求出两数最大公约数,并同时约去公约数即可。
&& 利用了最大公约数的思想
函数原型:

int gys(int x,int y)
{
    if(y%x==0) return x;
    return gys(y%x,x);
}

!!注意分子与分母是否异号

#include<cstdio>
#include<cmath>
#include <cstdlib>
using namespace std;

int gys(int x, int y)
{
    if(y % x == 0)
        return x;
    return gys(y % x, x);
}

int main(){
    int a, b, m, n;
    char c;

    while(scanf("%d/%d %d/%d %c",&a,&b,&m,&n,&c)!=EOF)
    {
        int x, y;
        //printf("%d/%d %d/%d %c",a,b,m,n,c);
        if(b == 0 || m == 0)
            return 0;
        else{
            switch(c)
            {
            case '+':
                {
                    x = a * n + b * m;
                    y = b * n;
                    break;
                }
            case '-':
                {
                    x = a * n - b * m;
                    y = b * n;
                    break;
                }
            case '*':
                {
                    x = a * m;
                    y = b * n;
                    break;
                }
            case '/':
                {
                    x = a * n;
                    y = b * m;
                    break;
                }
            }
            if(x == 0)
                printf("0");
            else
            {
                int t = gys(x, y);
                //printf("%d\n", t);
                if(x * y > 0)
                    printf("%d/%d\n",x/t, y/t);
                if(x * y < 0)
                    printf("-%d/%d\n",abs(x/t), abs(y/t));
            }
        }
    }

    return 0;
}