POJ 3979 分数加减法(水题)

题目链接

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

解题思路 :

加减好算,化简比较讨厌。把分子和分母每次都除以其GCD,直到GCD = 1。

//代码比较乱,大家将就看吧。。。。
/*
                                    _ooOoo_
                                   o8888888o
                                   88" . "88
                                   (| -_- |)
                                    O\ = /O
                                ____/`---'\____
                              .   ' \\| |// `.
                               / \\||| : |||// \
                             / _||||| -:- |||||- \
                               | | \\\ - /// | |
                             | \_| ''\---/'' | |
                              \ .-\__ `-` ___/-. /
                           ___`. .' /--.--\ `. . __
                        ."" '< `.___\_<|>_/___.' >'"".
                       | | : `- \`.;`\ _ /`;.`/ - ` : | |
                         \ \ `-. \_ __\ /__ _/ .-` / /
                 ======`-.____`-.___\_____/___.-`____.-'======
                                    `=---='

                 .............................................
*/
#include <map>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define pi 3.1415926
#define INF 123456789
using namespace std;
int gcd(int x, int y){
    int k;
    while(y){
        k = x % y;
        x = y;
        y = k;
    }
    return x;
}
int main(){
    int a, b, c, d, e, f, i, qq, q, w;
    char o;
    while(~scanf("%d/%d%c%d/%d", &a, &b, &o, &c, &d)){
            a = a * d;
            c = c * b;
            f = b * d;
            if(o == '-') e = a - c;
            else e = a + c;
            if(e == 0) puts("0");
            else if(e % f == 0)
                printf("%d\n", e / f);
            else{
                while(1){
                    q = abs(e), w = abs(f);
                    qq = gcd(q, w);
                    e /= qq;
                    f /= qq;
                    if(qq == 1) break;
                }
                printf("%d/%d\n", e, f);
            }
    }
    return 0;
}
/*
*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值