Java语言程序设计基础篇(第10版)编程练习题13.18(使用 Rational 类)

第十三章第十八题(使用 Rational 类)

题目要求:

  • 编写程序,使用 Rational 类计算下面的求和数列:

  

  • 你将会发现输出是不正确的 ,因为整数溢出(太大了)。为了解决这个问题 ,参见编程练习題13.15。
  • 代码参考
package chapter_13;import java.math.BigInteger;public class 编程练习题13_18RationalSum {public static void main(String[] args) {Rational2 resultRational2 = new Rational2();for (long i = 2; i <= 100; i++) {Rational2 rational2 = new Rational2(BigInteger.valueOf(i-1), BigInteger.valueOf(i));System.out.print(rational2.toString());if (i == 100) System.out.print(" = ");else if (i % 10 == 0) System.out.println(" + ");else System.out.print(" + ");resultRational2 = resultRational2.add(rational2);}//System.out.println(resultRational2);System.out.println(resultRational2.simplify());}
}class Rational2 extends Number implements Comparable<Rational2> {private BigInteger numerator = BigInteger.ZERO;private BigInteger denominator = BigInteger.ONE;public Rational2() {this(BigInteger.ZERO, BigInteger.ONE);}public Rational2(BigInteger numerator, BigInteger denominator) {BigInteger gcd = numerator.gcd(denominator);this.numerator = numerator.divide(gcd);this.denominator = denominator.divide(gcd);if (this.denominator.compareTo(BigInteger.ZERO) < 0) { // 确保分母为正this.numerator = this.numerator.negate();this.denominator = this.denominator.negate();}}private static BigInteger gcd(BigInteger n, BigInteger d) {return n.gcd(d);}public BigInteger getNumerator() {return numerator;}public BigInteger getDenominator() {return denominator;}public Rational2 add(Rational2 secondRational) {BigInteger n = numerator.multiply(secondRational.getDenominator()).add(denominator.multiply(secondRational.getNumerator()));BigInteger d = denominator.multiply(secondRational.getDenominator());return new Rational2(n, d);}public Rational2 subtract(Rational2 secondRational) {BigInteger n = numerator.multiply(secondRational.getDenominator()).subtract(denominator.multiply(secondRational.getNumerator()));BigInteger d = denominator.multiply(secondRational.getDenominator());return new Rational2(n, d);}public Rational2 multiply(Rational2 secondRational) {BigInteger n = numerator.multiply(secondRational.getNumerator());BigInteger d = denominator.multiply(secondRational.getDenominator());return new Rational2(n, d);}public Rational2 divide(Rational2 secondRational) {if (secondRational.getNumerator().equals(BigInteger.ZERO)) {throw new ArithmeticException("Division by zero");}BigInteger n = numerator.multiply(secondRational.getDenominator());BigInteger d = denominator.multiply(secondRational.getNumerator());return new Rational2(n, d);}@Overridepublic String toString() {return denominator.equals(BigInteger.ONE) ? numerator.toString() : numerator + "/" + denominator;}@Overridepublic boolean equals(Object other) {if (other instanceof Rational2) {Rational2 that = (Rational2) other;return this.subtract(that).getNumerator().equals(BigInteger.ZERO);}return false;}@Overridepublic int intValue() {return numerator.intValue() / denominator.intValue(); // 注意:这可能会损失精度}@Overridepublic float floatValue() {return (float)doubleValue();}@Overridepublic double doubleValue() {return numerator.doubleValue() / denominator.doubleValue();}@Overridepublic long longValue() {return numerator.longValue() / denominator.longValue(); // 同样注意精度损失}@Overridepublic int compareTo(Rational2 o) {return this.subtract(o).getNumerator().signum();}public Rational2 simplify() {BigInteger gcd = numerator.gcd(denominator);return new Rational2(numerator.divide(gcd), denominator.divide(gcd));}
}
  • 输出结果:
     
1/2 + 2/3 + 3/4 + 4/5 + 5/6 + 6/7 + 7/8 + 8/9 + 9/10 + 
10/11 + 11/12 + 12/13 + 13/14 + 14/15 + 15/16 + 16/17 + 17/18 + 18/19 + 19/20 + 
20/21 + 21/22 + 22/23 + 23/24 + 24/25 + 25/26 + 26/27 + 27/28 + 28/29 + 29/30 + 
30/31 + 31/32 + 32/33 + 33/34 + 34/35 + 35/36 + 36/37 + 37/38 + 38/39 + 39/40 + 
40/41 + 41/42 + 42/43 + 43/44 + 44/45 + 45/46 + 46/47 + 47/48 + 48/49 + 49/50 + 
50/51 + 51/52 + 52/53 + 53/54 + 54/55 + 55/56 + 56/57 + 57/58 + 58/59 + 59/60 + 
60/61 + 61/62 + 62/63 + 63/64 + 64/65 + 65/66 + 66/67 + 67/68 + 68/69 + 69/70 + 
70/71 + 71/72 + 72/73 + 73/74 + 74/75 + 75/76 + 76/77 + 77/78 + 78/79 + 79/80 + 
80/81 + 81/82 + 82/83 + 83/84 + 84/85 + 85/86 + 86/87 + 87/88 + 88/89 + 89/90 + 
90/91 + 91/92 + 92/93 + 93/94 + 94/95 + 95/96 + 96/97 + 97/98 + 98/99 + 99/100 = 264414864639329557497913717698145082779489/2788815009188499086581352357412492142272

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1473528.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

蜂窝物联农业气象站,守护丰收每一步

现代农业的革新者——农业自动气象站&#xff0c;正以其多功能的传感器、高效的数据采集传输系统、智能的数据云平台以及可靠的供电供网系统&#xff0c;成为农业生产中的得力助手。这些传感器能够实时监测温度、湿度、风速、风向、气压、土壤温度、土壤湿度、土壤PH值、土壤盐…

CorelDRAW2024新版本来咯!你的设计神助手

&#x1f389; 设计界的朋友们&#xff0c;注意啦&#xff01;你们的新宠——CorelDRAW 2024 来咯&#xff01; &#x1f31f; 一、设计神器再进化 亲爱的设计小伙伴们&#xff0c;有没有感觉每天与那些不配合的软件战斗&#xff0c;像是在打怪升级&#xff1f;&#x1f409; …

Selenium的这些自动化测试技巧你知道几个?

Selenium自动化测试技巧 与以前瀑布式开发模式不同&#xff0c;现在软件测试人员具有使用自动化工具执行测试用例套件的优势&#xff0c;而以前&#xff0c;测试人员习惯于通过测试脚本执行来完成测试。 但自动化测试的目的不是完全摆脱手动测试&#xff0c;而是最大程度地减少…

js的作用域链

function test(){} 运行期上下文&#xff1a;当函数执行时&#xff0c;会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境&#xff0c;函数每次执行时对应的执行上下文都是 独一无二的&#xff0c;所以多次调用一个函数对导致创建多个执行上下…

leetcode力扣_排序问题

215.数组中的第K个最大元素 鉴于已经将之前学的排序算法忘得差不多了&#xff0c;只会一个冒泡排序法了&#xff0c;就写了一个冒牌排序法&#xff0c;将给的数组按照降序排列&#xff0c;然后取nums[k-1]就是题目要求的&#xff0c;但是提交之后对于有的示例显示”超出时间限制…

谷粒商城学习笔记-12-开发工具环境安装配置

文章目录 一&#xff0c;JDK的安装1.进入官网下载2&#xff0c;jdk安装3&#xff0c;Java环境验证 二&#xff0c;Idea安装插件1&#xff0c;lombok2&#xff0c;MybatisX 三&#xff0c;Maven的下载与配置1&#xff0c;下载Maven2&#xff0c;Idea配置Maven3&#xff0c;maven…

ESP32CAM物联网教学05

ESP32CAM物联网教学05 超级监控摄像头 点灯科技APP还能查看摄像头的视频呢&#xff01;这样&#xff0c;小智的物联网小车就变身成为超级监控摄像头啦。 测试摄像头视频图像 我们把前面的物联网小车的程序稍作修改&#xff0c;增加了摄像头的程序&#xff0c;去掉了按键组件程…

RocketMQ-订阅一致及解决方案

背景 这里借用Rocketmq官方的一句话来描述订阅关系一致: 订阅关系一致指的是同一个消费者分组Group ID下&#xff0c;所有Consumer实例所订阅的Topic和Tag必须完全一致。如果订阅关系不一致&#xff0c;可能导致消息消费逻辑混乱&#xff0c;消息被重复消费或遗漏。 具体的问题…

关于GIS的概念方面在前端编程中的理解

关于GIS的概念方面在前端编程中的理解 一. 什么是gis二. 关于地球的建模(了解)三. GIS坐标系表现形式四.GIS的数据4.1 矢量数据4.2 栅格数据4.3 矢量数据和栅格数据的不同 一. 什么是gis 地理坐标系统&#xff0c;其目的就是通过地理坐标系可以确定地球上任何一点的位置。 二. …

jenkins配置gitee源码地址连接不上

报错信息如下&#xff1a; 网上找了好多都没说具体原因&#xff0c;最后还是看jenkins控制台输出日志发现&#xff1a; ssh命令执行失败&#xff08;git环境有问题&#xff0c;可能插件没安装成功等其他问题&#xff09; 后面发现是jenkins配置git的地方git安装路径错了。新手…

215. 数组中的第K个最大元素(中等)

215. 数组中的第K个最大元素 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;215. 数组中的第K个最大元素 2.详细题解 快速排序算法在每一轮排序中&#xff0c;随机选择一个数字 x x x&#xff0c;根据与 x x x的大小关系将要排序的数…

设计小能手必备!CorelDRAW2024新功能大揭秘

&#x1f389; 设计小能手必备&#xff01;CorelDRAW 2024新功能大揭秘 嗨&#xff0c;亲爱的小红书的朋友们&#xff5e;&#x1f44b; 今天我要和大家安利一款让设计师们疯狂打call的设计软件——CorelDRAW 2024&#xff01;&#x1f31f; 作为一名资深的设计师&#xff0c;我…

VBA初学:零件成本统计之三(获取材料外协的金额)

第三步&#xff0c;从K3的数据库中获取金额 我这里是使用循环&#xff0c;通过任务单号将金额汇总出来&#xff0c;如果使用数组的话&#xff0c;还要按任务单写GROUP&#xff0c;还要去对应&#xff0c;不如循环直接一点 获取材料和外协金额的表格Sub getje()Dim rowcount A…

ctfshow-web入门-文件包含(web88、web116、web117)

目录 1、web88 2、web116 3、web117 1、web88 没有过滤冒号 : &#xff0c;可以使用 data 协议&#xff0c;但是过滤了括号和等号&#xff0c;因此需要编码绕过一下。 这里有点问题&#xff0c;我 (ls) 后加上分号发现不行&#xff0c;可能是编码结果有加号&#xff0c;题目…

Qwen1.5-1.8b部署

仿照ChatGLM3部署&#xff0c;参考了Qwen模型的文档&#xff0c;模型地址https://modelscope.cn/models/qwen/Qwen1.5-1.8B-Chat/summary http接口 服务端代码api.py from fastapi import FastAPI, Request from transformers import AutoTokenizer, AutoModelForCausalLM, …

Docker:Docker网络

Docker Network 是 Docker 平台中的一项功能&#xff0c;允许容器相互通信以及与外界通信。它提供了一种在 Docker 环境中创建和管理虚拟网络的方法。Docker 网络使容器能够连接到一个或多个网络&#xff0c;从而使它们能够安全地共享信息和资源。 预备知识 推荐先看视频先有…

多功能实用工具箱,实用工具箱提供了从日常,图片,查询、设备、特色、提取等多方面的功能,操作简单,即点即用,避免您下载超多应用的难题,应用体积轻巧,界面简洁。

今天给大家分享手机工具软件合集&#xff0c;明天想看什么软件&#xff0c;在评论区留言吧&#xff01; 软件链接&#xff1a;4款万能玩机工具&#xff0c;一网打尽&#xff0c;快来看看&#xff01; 实用工具箱 这是一款多功能实用工具箱&#xff0c;实用工具箱提供了从日常…

前端面试题7(单点登录)

如何实现单点登录 单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff09;是一种允许用户在多个应用系统中只需登录一次&#xff0c;就可以访问所有相互信任的应用系统的认证技术。实现前端单点登录主要依赖于后端的支持和一些特定的协议&#xff0c;如OAuth、Ope…

Elasticsearch 实现 Word、PDF,TXT 文件的全文内容提取与检索

文章目录 一、安装软件:1.通过docker安装好Es、kibana安装kibana:2.安装原文检索与分词插件:之后我们可以通过doc命令查看下载的镜像以及运行的状态:二、创建管道pipeline名称为attachment二、创建索引映射:用于存放上传文件的信息三、SpringBoot整合对于原文检索1、导入依赖…

论文学习——基于小生境预测策略的动态多目标进化算法

论文题目&#xff1a;A dynamic multi-objective evolutionary algorithm based on Niche prediction strategy 基于决策变量分类的动态多目标优化算法&#xff08;Jinhua Zheng a,b, Bo Zhang a,b,∗, Juan Zou a,b, Shengxiang Yang a,d, Yaru Hu&#xff09;Applied Soft C…