1034 有理数四则运算 (20 分)java

栏目: Java · 发布时间: 7年前

内容简介:本题要求编写程序,计算 2 个有理数的和、差、积、商。输入格式:输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。

本题要求编写程序,计算 2 个有理数的和、差、积、商。

输入格式:

输入在一行中按照 a1/b1 a2/b2 的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为 0。

输出格式:

分别在 4 行中按照 有理数1 运算符 有理数2 = 结果 的格式顺序输出 2 个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式 k a/b,其中 k 是整数部分,a/b 是最简分数部分;若为负数,则须加括号;若除法分母为 0,则输出 Inf。题目保证正确的输出中没有超过整型范围的整数。

输入样例 1:

2/3 -4/2

输出样例 1:

2/3 + (-2) = (-1 1/3)

2/3 - (-2) = 2 2/3

2/3 * (-2) = (-1 1/3)

2/3 / (-2) = (-1/3)

输入样例 2:

5/3 0/6

输出样例 2:

1 2/3 + 0 = 1 2/3

1 2/3 - 0 = 1 2/3

1 2/3 * 0 = 0

1 2/3 / 0 = Inf

Think

做除法运算时先要判断分母。

code

import java.io.*;

public class Main {
    
    //辗转相除法
    private static long GCD(long a,long b) {
        return b == 0 ? a : GCD(b , a % b);
    }
    //相加
    private static String calculate(long a,long b) {
        if(b == 0) {
            return "Inf";
        }
        long gcd,t,x;
        gcd = GCD(Math.abs(a), b);    //最大公约数
        //简化
        a = a / gcd;
        b = b / gcd;
        t = Math.abs(a) / b;    //整数
        x = Math.abs(a) - t * b;//分子
        if(t == 0 && x == 0) {
            return "0";
        }
        if(a < 0) {
            if(t != 0 && x != 0)
                return "(-"+t+" "+x+"/"+b+")";
            if(t != 0 && x == 0)
                return "(-"+t+")";
            if(t == 0 && x != 0)
                return "(-"+x+"/"+b+")";
        } else {
            if (t != 0 && x != 0)
                return t+" "+x+"/"+b;
            if(t != 0 && x == 0)
                return String.valueOf(t);
            if(t == 0 && x != 0)
                return x+"/"+b;            
        }
        return null;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        String[] istr = in.readLine().split(" ");
        String[] a = istr[0].split("/"), b = istr[1].split("/");
        long a1 = Long.parseLong(a[0]), a2 = Long.parseLong(b[0]);
        long b1 = Long.parseLong(a[1]), b2 = Long.parseLong(b[1]);
        String A,B;
        A = calculate(a1,b1);
        B = calculate(a2,b2);
        
        out.println(A + " + " + B + " = " + calculate(a1*b2+a2*b1,b1*b2));    
        out.flush();
        out.println(A + " - " + B + " = " + calculate(a1*b2-a2*b1,b1*b2));
        out.flush();
        out.println(A + " * " + B + " = " + calculate(a1*a2,b1*b2));
        out.flush();
        out.print(A + " / " + B + " = ");
        out.flush();
        if(a2 < 0) {
            out.print(calculate(a1 * b2 * a2 / Math.abs(a2) , b1 * Math.abs(a2)));
        } else {
            out.print(calculate(a1 * b2 , b1 * a2));
        }    
        out.flush();
    }
}

1034 有理数四则运算 (20 分)java


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据挖掘导论

数据挖掘导论

(美)Pang-Ning Tan、Michael Steinbach、Vipin Kumar / 机械工业出版社 / 2010-9 / 59.00元

本书全面介绍了数据挖掘的理论和方法,着重介绍如何用数据挖掘知识解决各种实际问题,涉及学科领域众多,适用面广。 书中涵盖5个主题:数据、分类、关联分析、聚类和异常检测。除异常检测外,每个主题都包含两章:前面一章讲述基本概念、代表性算法和评估技术,后面一章较深入地讨论高级概念和算法。目的是使读者在透彻地理解数据挖掘基础的同时,还能了解更多重要的高级主题。 本书特色 ·包含大量的图表、......一起来看看 《数据挖掘导论》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具