分数的运算

图片说明

import java.io.*;
import java.util.*;

public class Main {
    static int gcd(int x,int y){
        if(y == 0) return x;
        return gcd(y,x%y);
    }
    static int lcm(int x,int y){
        return x * y / gcd(x,y);
    }
    static String hj(int x1x2,int mo){
        if(x1x2 ==0 || mo == 0){
            return 0 + " " + 0;
        }
        int g = gcd(x1x2,mo);
        return "" + (x1x2/g) + " " + (mo/g);

    }
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int x1 = sc.nextInt();
        int y1 = sc.nextInt();
        int x2 = sc.nextInt();
        int y2 = sc.nextInt();
        int mo = lcm(y1,y2);
        int x11 = mo/y1*x1;int x22 = mo/y2*x2;
        if(x11+x22 < 0) {
            System.out.println("-"  + hj(x11 + x22, -mo));
        }else {
            System.out.println(hj(x11 + x22, mo));
        }
        if(x11-x22 < 0) {
            System.out.println("-"  + hj(x11 - x22, -mo));
        }else {
            System.out.println(hj(x11 - x22, mo));
        }
        if(x1*x2 < 0) {
            System.out.println( hj(x1 * x2, y1 * y2));
        }else {
            System.out.println(hj(x1 * x2, y1 * y2));
        }
        if(x1*y2 < 0) {
            System.out.println("-"  + hj(x1* y2, -(x2 * y1)));
        }else {
            System.out.println(hj(x1* y2, x2 * y1));
        }

    }
}

这里参考毛毛的代码,因为自己的思维很混乱,所以很难做出这种题。先写出两个最基本的最大公约数和最小公倍数的函数代码。这样一来求这两个数就非常的简便了。接下来是毛毛的优化,首先呢先要找一个x11和一个x22,这两个数呢,就是通分之后的分子,分母也很容易算出来,就是最大公倍除公约数就可以。然后还要写一个化简函数,直接把结果算出来之后呢,放进化简函数里面即可。ps:化简函数也是人家的,需要多学习一下这个思维。

全部评论

相关推荐

争当牛马还争不上
码农索隆:1.把简历改哈 2.猛投,狠投 3.把基础打牢 这样你在有机会的时候,才能抓住
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务