zoukankan      html  css  js  c++  java
  • P1572 计算分数

    题目传送门

    #include <bits/stdc++.h>
    
    using namespace std;
    int a, b, c, d;
    
    /**
     测试用例:
     2/1+1/3-1/4
     答案:25/12
    
    
     -2/1+1/3-1/4
     答案:-23/12
    
     测试点6
     7/4+1/3+8/5-3/2-6/9-6/4-5/2+6/2+4/9-3/9-2/3+5/2-5/4+3/9-3/8-5/8+6/8+3/8-4/7-5/7-3/6+6/9-5/6-5/7-5/2
     */
    int gcd(int x, int y) {
        if (y == 0) return x;
        return gcd(y, x % y);
    }
    
    int lcm(int x, int y) {
        return x * y / gcd(x, y);
    }
    
    int main() {
        //和我一起念:scanf大法好!!
        scanf("%d/%d", &a, &b);
    
        //不断读取后面的数字,这玩意居然还能读入负号,牛!
        while (scanf("%d/%d", &c, &d) != EOF) {
            //通分,分母取最小公倍
            int e = lcm(b, d);
            //分子乘啊乘啊乘
            int f = e / b * a + e / d * c;
            //求最大公约数,约分
            int g = gcd(e, f);
            a = f / g;
            b = e / g;
        }
    
        //因为求负数最大公约,最小公倍也是可以的,但可能最终会出现1259/-360这样的情况
        //如果这时,需要特判一下,写成:-1259/360
        if (b < 0) a = -a, b = -b;
    
        //如果分母是1,就输出分子
        if (b == 1) printf("%d
    ", a);
        else printf("%d/%d
    ", a, b);
        return 0;
    }
    
  • 相关阅读:
    mock static方法
    Spring Boot 例一 实现jsonp接口
    安装Linux虚拟机到执行Java程序
    Mock单元测试
    通用分页请求返回类
    Collectors.groupingBy分组后的排序问题
    按权重分配任务
    Java正则表达式-捕获组
    远程抓取图片
    正则
  • 原文地址:https://www.cnblogs.com/littlehb/p/15209249.html
Copyright © 2011-2022 走看看