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

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

内容简介:本题要求编写程序,计算 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


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

查看所有标签

猜你喜欢:

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

Java核心技术及面试指南

Java核心技术及面试指南

金华、胡书敏、周国华、吴倍敏 / 北京大学出版社 / 2018-9-1 / 59.00

本书根据大多数软件公司对高级开发的普遍标准,为在Java 方面零基础和开发经验在3 年以下的初级程序员提供了升级到高级工程师的路径,并以项目开发和面试为导向,精准地讲述升级必备的技能要点。具体来讲,本书围绕项目常用技术点,重新梳理了基本语法点、面向对象思想、集合对象、异常处理、数据库操作、JDBC、IO 操作、反射和多线程等知识点。 此外,本书还提到了对项目开发很有帮助的“设计模式”和“虚拟......一起来看看 《Java核心技术及面试指南》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具