资讯专栏INFORMATION COLUMN

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

mikyou / 2386人阅读

摘要:本题要求编写程序,计算个有理数的和差积商。输出格式分别在行中按照有理数运算符有理数结果的格式顺序输出个有理数的和差积商。注意输出的每个有理数必须是该有理数的最简形式,其中是整数部分,是最简分数部分若为负数,则须加括号若除法分母为,则输出。

本题要求编写程序,计算 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();
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77449.html

相关文章

  • java学习笔记- 运算

    摘要:中的运算符按功能划分主要分类。算术运算符的优先级浮点数比较在中,一般不建议直接比较两个浮点数是否相等。还有与二元运算符相结合的赋值运算符。与二元运算符相结合的赋值运算符有其运算即为先两者进行二元操作再赋值给前者。 java中的运算符按功能划分主要分7类。 算术运算符 +, -, *, /, ++, --, % 关系运算符 =, ==, != 布尔逻辑运算符 &&, &, |...

    JellyBool 评论0 收藏0
  • 智能合约语言Solidity教程系列1 - 类型介绍

    摘要:本文首发于深入浅出区块链社区原文链接智能合约语言教程系列地址类型介绍原文已更新,请读者前往原文阅读现在的中文文档,要么翻译的太烂,要么太旧,决定重新翻译下。枚举类型应至少有一名成员。 本文首发于深入浅出区块链社区原文链接:智能合约语言 Solidity 教程系列2 - 地址类型介绍原文已更新,请读者前往原文阅读 现在的Solidity中文文档,要么翻译的太烂,要么太旧,决定重新翻译下。...

    andycall 评论0 收藏0
  • Python标准库---10、内置类型:数字类型

    摘要:上一篇文章标准库内置类型逻辑值检测布尔运算比较下一篇文章标准库内置类型迭代器类型序列类型数字类型存在三种不同的数字类型整数浮点数和复数。标准库包含附加的数字类型,如表示有理数的以及以用户定制精度表示浮点数的。 上一篇文章:Python标准库---9、内置类型:逻辑值检测、布尔运算、比较下一篇文章:Python标准库---11、内置类型:迭代器类型、序列类型 数字类型 --- int,...

    NotFound 评论0 收藏0
  • SICP Python 描述 2.2 数据抽象

    摘要:示例有理数的算术有理数可表示为整数的比值,并且它组成了实数的一个重要子类。有理数的值需要两部分来描述。这里的重要概念是,通过将有理数表示为整数的比值,我们能够完全避免近似问题。返回有理数的分子。 2.2 数据抽象 来源:2.2 Data Abstraction 译者:飞龙 协议:CC BY-NC-SA 4.0 由于我们希望在程序中表达世界中的大量事物,我们发现它们的大多数都具有...

    Joonas 评论0 收藏0
  • SICP Python 描述 2.7 泛用方法

    摘要:使用消息传递,我们就能使抽象数据类型直接拥有行为。构造器以类似的方式实现它在参数上调用了叫做的方法。抽象数据类型允许我们在数据表示和用于操作数据的函数之间构造界限。 2.7 泛用方法 来源:2.7 Generic Operations 译者:飞龙 协议:CC BY-NC-SA 4.0 这一章中我们引入了复合数据类型,以及由构造器和选择器实现的数据抽象机制。使用消息传递,我们就能...

    leanote 评论0 收藏0

发表评论

0条评论

mikyou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<