【还没抄懂】有理数四则运算(20)

有理数四则运算(20)

https://www.nowcoder.com/questionTerminal/c0e43b08b87f4f93bec7ab215e1aa60b

import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] strs = br.readLine().split(" ");
        String[] val0 = strs[0].split("/");
        String[] val1 = strs[1].split("/");
        
        int a0 = Integer.parseInt(val0[0]);
        int b0 = Integer.parseInt(val0[1]);
        int a1 = Integer.parseInt(val1[0]);
        int b1 = Integer.parseInt(val1[1]);
        
        String A = toStr(a0, b0);
        String B = toStr(a1, b1);
        //加
        int b = b0*b1;
        int a = a0*b1 +a1*b0;
        String add = toStr(a, b);
        System.out.println(A+" + "+B+" = "+add);
        
        // reduce
        a = a0 * b1 - a1 * b0;
        String reduce = toStr(a, b);
        System.out.println(A+" - "+B+" = "+reduce);
        // multiply
        a = a0 * a1;
        String mult = toStr(a,b);
        System.out.println(A+" * "+B+" = "+mult);
        // divide
        a = a0 * b1;
        b = b0 * a1;
        String div = toStr(a,b);
        System.out.println(A+" / "+B+" = "+div);
    }
    
    private static String toStr(int a, int b){
        if(a == 0) return "0";//分子为0,则结果为0
        if(b == 0) return "Inf";//分母为0,无意义
        
        StringBuilder sb = new StringBuilder();
        //求符号
        boolean flag = false;//是否是负数
        if(a < 0){
            flag = true;//是负数
            a = -a;
        }
        if(b < 0){
            flag = !flag;//在原来的基础上求反
            b = -b;
        }
        
        if(flag){
            //如果是负数,加上负号
            sb.append("(-");
        }
        
        int c = getYuefen(a, b);
        a /= c;
        b /= c;
        int beishu  = a / b;
        a = a%b;
        if(beishu != 0){
            sb.append(beishu);
            if(a != 0){
                sb.append(" ").append(a).append("/").append(b);
            }
        }else{
            sb.append(a).append("/").append(b);
        }
        
        if(flag){
            sb.append(")");
            
        }

        return sb.toString();
       
        
        
    }
    //把分数化成最简分数的过程就叫约分
    private static int getYuefen(int a, int b){
        if( a%b == 0){
            return b;//能被整除
        }
        return getYuefen(b , a%b);
    }
}


PAT乙级 文章被收录于专栏

做题记录

全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务