【NYOJ】[111]分数加减法

这里写图片描述
这里写图片描述

因为输出形式也是分数
所以这一题还是挺有意思的

思路不难 数学问题
需要考虑的特殊情况
一是结果小于0
二是结果为整数
三是结果需要化简

#include<stdio.h>
int gcd(int a,int b) {
    if(b==0)
        return a;
    else
        return gcd(b,a%b);
}
int main() {
    int a,b,c,d;
    char s;
    while(scanf("%d/%d%c%d/%d",&a,&b,&s,&c,&d)!=EOF) {
        int m,n=b*d;
        a*=n/b;
        c*=n/d;
        if(s=='+')
            m=a+c;
        else {
            if(a<c) {
                printf("-");
                m=c-a;
            } else
                m=a-c;
        }
        if(!m)
            printf("0
");
        else if(m%n==0) {
            printf("%d
",m/n);
        } else {
            int t=gcd(m,n);
            m/=t;
            n/=t;
            printf("%d/%d
",m,n);
        }
    }
    return 0;
}

标程用的字符串记录算式
但思路还是一样的

#include<stdio.h>
char str[20];
int Gcd(int m,int n) {
    if (m==0) return n;
    return Gcd(n%m,m);
}
int main() {
    int fz,fm,gcd;
    while(scanf("%s",str)!=EOF) {
        if(str[3]=='-')
            fz=(str[0]-'0')*(str[6]-'0')-(str[2]-'0')*(str[4]-'0');
        else fz=(str[0]-'0')*(str[6]-'0')+(str[2]-'0')*(str[4]-'0');
        if(fz) {
            fm=(str[2]-'0')*(str[6]-'0');
            gcd=Gcd(fz,fm);
            if(gcd<0) gcd=-gcd;
            if(fm/gcd==1) printf("%d
",fz/gcd);
            else printf("%d/%d
",fz/gcd,fm/gcd);
        } else puts("0");
    }
}

题目地址:【NYOJ】[111]分数加减法

原文地址:https://www.cnblogs.com/BoilTask/p/12569849.html