1081 Rational Sum(20 分)

模板题目

#include<iostream>
#include<algorithm>
using namespace std;
struct fraction {
    int up, down;
    fraction() { up = 0, down = 1; }
};
int gcd(int a, int b)
{
    a = abs(a), b = abs(b);
    if (a < b)swap(a, b);
    return b == 0 ? a : gcd(b, a%b);
}
fraction reduction(fraction x)
{
    if (x.down < 0)x.up = -x.up, x.down = -x.down;
    if (x.down == 0)x.up = 1;
    else
    {
        int d = gcd(x.up, x.down);
        x.up /= d;
        x.down /= d;
    }
    return x;
}
fraction add(fraction x, fraction y)
{
    fraction result;
    result.up = x.up*y.down + y.up*x.down;
    result.down = x.down*y.down;
    result = reduction(result);
    return result;
}
void showresult(fraction x)
{
    if (x.down == 1)printf("%d", x.up);
    else if (abs(x.up) < x.down)printf("%d/%d", x.up, x.down);
    else printf("%d %d/%d", x.up / x.down, abs(x.up) % x.down, x.down);
}
int main()
{
    int n;
    scanf("%d", &n);
    fraction result;
    while (n--)
    {
        fraction temp;
        scanf("%d/%d", &temp.up, &temp.down);
        result = add(result, temp);
    }
    showresult(result);
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容