PAT甲1081 Rational Sum(20 分)

感觉写的乱七八糟的竟然一次ac了。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

struct rational
{
    int fenzi;
    int fenmu;
};

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

void simplify(rational &a)
{
    if(a.fenzi==0)a.fenmu=1;
    else
    {
        int x=gcd(abs(a.fenzi),a.fenmu);
        a.fenzi/=x;
        a.fenmu/=x;
    }

}

rational add(rational a,rational b)
{
    rational c;
    c.fenmu=a.fenmu*b.fenmu;
    c.fenzi=a.fenzi*b.fenmu+b.fenzi*a.fenmu;
    simplify(c);
    return c;
}

int N;

int main()
{
    scanf("%d",&N);
    rational result;
    result.fenzi=0;
    result.fenmu=1;
    for(int i=0;iint fenzi,fenmu;
        scanf("%d",&fenzi);
        getchar();
        scanf("%d",&fenmu);
        a.fenzi=fenzi;
        a.fenmu=fenmu;
        result=add(result,a);
    }
    if(abs(result.fenzi)%result.fenmu==0)
    {
        printf("%d",result.fenzi/result.fenmu);
    }
    else if(abs(result.fenzi)>result.fenmu)
    {
        printf("%d %d/%d",abs(result.fenzi)/result.fenmu,result.fenzi%result.fenmu,result.fenmu);
    }
    else
    {
        printf("%d/%d",result.fenzi,result.fenmu);
    }
    return 0;
}

你可能感兴趣的:(PAT)