您的位置:首页 > 其它

ACM: 水题 分数运算 poj 3979

2016-05-19 23:22 411 查看
分数加减法

Description
编写一个C程序,实现两个分数的加减法
Input

输入包含多行数据

每行数据是一个字符串,格式是"a/boc/d"。

其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。

数据以EOF结束

输入数据保证合法
Output

对于输入数据的每一行输出两个分数的运算结果。

注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
Sample Input

1/8+3/8

1/4-1/2

1/3-1/3

Sample Output

1/2

-1/4

0

题意: 需要注意的是当分母为1的时候不需要书写分母.

代码:

#include <cstdio>

#include <iostream>

#include <cstring>

using namespace std;

int a, b, c, d;

char ch, ch1, ch2;

int gcd(int a,int b)

{

    if(b == 0) return a;

    else return gcd(b,a%b);

}

int clm(int a,int b)

{

    return ( (a*b)/gcd(a,b) );

}

int main()

{

//    freopen("input.txt","r",stdin);

    while(scanf("%d%c%d%c%d%c%d",&a,&ch1,&b,&ch,&c,&ch2,&d) != EOF)

    {

        if(ch == '+')

        {

            int t = gcd(a*d+c*b,b*d);

            if(b*d/t != 1)

                printf("%d/%d\n",(a*d+c*b)/t,b*d/t);

            else

                printf("%d\n",(a*d+c*b)/t);

        }

        else

        {

            if(a*d-c*b == 0)

            {

                printf("0\n");

                continue;

            }

            int t = gcd(a*d-c*b,b*d);

            if(t < 0) t = -t;

            if(b*d/t != 1)

                printf("%d/%d\n",(a*d-c*b)/t,b*d/t);

            else

                printf("%d\n",(a*d-c*b)/t);

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: