【从零开始学习JAVA

2023-11-08

目录

 前言:

 BigInterger:

BigInteger常见的方法:

总结:


 前言:

        本篇我们将介绍BigInteger这个比较实用一点的API,这个API在我们实际写项目中都是很实用的API,因此大家应该对这个API有更加熟练的掌握。

 BigInterger:

在Java中,整数类型int和long的取值范围是有限的,超出该范围的整数无法进行运算或表示。而在某些应用场景中,需要处理的数可能具有非常大的位数,此时可以使用Java中的BigInteger类。

BigInteger是Java中的一个类,用于表示任意精度的整数。它可以处理比long更大范围的整数,支持加、减、乘和除等基本运算,还支持位运算、比较、判断奇偶性等操作。BigInteger对象是不可变的,因此一旦创建,就不能修改其值。

以下是一个使用BigInteger类的简单示例。该示例演示了如何计算1到100的阶乘之和。

import java.math.BigInteger;

public class BigIntDemo {
    public static void main(String[] args) {
        BigInteger result = BigInteger.ZERO;
        BigInteger fac = BigInteger.ONE;

        for (int i = 1; i <= 100; i++) {
            fac = fac.multiply(BigInteger.valueOf(i));
            result = result.add(fac);
        }

        System.out.println(result);
    }
}

输出:

9332621544394415268169923885626670049071596826438162146
8592963895217599993229915608941463976156518286253697920
827223758251185210916864000000000000000000000000

BigInteger.ZERO和BigInteger.ONE是BigInteger类的常量,分别表示值为0和1的BigInteger对象。它们的定义如下:


public static final BigInteger ZERO = new BigInteger(new int[0], 0);
public static final BigInteger ONE = valueOf(1);

我们可以使用这两个常量来进行初始化操作,例如:

BigInteger x = BigInteger.ZERO;
BigInteger y = BigInteger.ONE;

这里我们将变量x和y,分别初始化为0和1的BigInteger对象。由于BigInteger对象是不可变的,因此这两个常量可以被多次使用,而不必担心其值被修改。

以上示例中,我们使用了BigInteger.ZERO和BigInteger.ONE常量来初始化了变量result和fac包含了BigInteger.valueOf静态方法来创建一个大整数对象,这个创建方法接受一个long型的参数作为参数。这样就不必使用String类型的构造函数,而可以直接将一个整数包装在BigInteger对象中。在for循环中,我们使用了multiply方法来计算阶乘并将其加入到结果中。

BigInteger常见的方法:

1. 构造函数和静态工厂方法

BigInteger类提供了多个构造函数和静态工厂方法(静态方法返回一个新的BigInteger对象),用于创建BigInteger对象。常用的有:

  • public BigInteger(String val):用字符串val创建一个BigInteger对象。
  • public BigInteger(int signum, byte[] magnitude):用数组magnitude表示的值创建一个BigInteger对象,其中signum指定值的正负性。
  • public static BigInteger valueOf(long val):用long类型的值创建一个新的BigInteger对象。
  • public static BigInteger probablePrime(int bitLength, Random rnd):返回一个bitLength位大的素数。

2. 算术运算方法

BigInteger类支持多种算术运算方法,包括加减乘除、求余等。常用的有:

  • public BigInteger add(BigInteger val):将当前BigInteger对象加上另一个BigInteger对象val。
  • public BigInteger subtract(BigInteger val):将当前BigInteger对象减去另一个BigInteger对象val。
  • public BigInteger multiply(BigInteger val):将当前BigInteger对象乘以另一个BigInteger对象val。
  • public BigInteger divide(BigInteger val):将当前BigInteger对象除以另一个BigInteger对象val。
  • public BigInteger mod(BigInteger val):求当前BigInteger对象对另一个BigInteger对象val取模。
  • public BigInteger pow(int exponent):求当前BigInteger对象的exponent次方。

3. 比较方法

BigInteger类提供了多种比较方法,用于比较两个BigInteger对象的大小关系。常用的有:

  • public int compareTo(BigInteger val):比较当前BigInteger对象与另一个BigInteger对象val的大小关系,返回-1、0或1。
  • public boolean equals(Object obj):判断当前BigInteger对象是否等于另一个对象obj。
  • public int signum():返回当前BigInteger对象的符号,-1表示负数,0表示零,1表示正数。

4. 转换方法

BigInteger类提供了多种转换方法,用于将BigInteger对象转换为其他类型的值。常用的有:

  • public byte[] toByteArray():返回当前BigInteger对象的二进制表示,用byte数组表示。
  • public String toString()`:将当前BigInteger对象转换成字符串表示。
  • public String toString(int radix):将当前BigInteger对象转换成radix进制的字符串表示。
  • public int intValue()、public long longValue()、public float floatValue()、public double doubleValue():将当前BigInteger对象转换成对应的基本类型值。

总结:

        以上只是BigInteger类提供的部分常用方法和API,实际上BigInteger类还有很多其它实用的方法和API可供使用。

        在实际应用中,BigInteger可以用于任何需要处理大整数的场合,例如密码学、大数计算等方面。总之,BigInteger类提供了一种简单、可靠的处理大数字的方法,可以方便我们进行精密计算。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【从零开始学习JAVA 的相关文章

  • (华硕)电脑第一次开机蓝屏,二次开机启动

    华硕主板 第一次开机蓝屏 二次开机启动 使用了无缓存的M 2 SSD 2个通道的SSD 修改开机模式 改成兼容模式启动
  • 【H5】阻止H5页面播放视频默认全屏

    老是看到有人找不到阻止视频默认全屏的问题 看到别人发的帖子不是隐藏video标签使用canvas绘制视频就是使用插件来禁止视频默认全屏的问题 其实没有那么麻烦的只需要设置一下属性就可以了 x5 playsinline true 安卓需要设置
  • gRPC-Java实现各种服务类型

    gRPC实现 借助gRPC 我们可以在一个 proto文件中定义一次服务 并以gRPC支持的任何语言生成客户端和服务器 而这又可以在从大型数据中心内的服务器到电脑的各种环境中运行 gRPC为您处理不同的语言和环境 还获得了使用协议缓冲区的所
  • 设计模式-Visitor模式(访问者模式)

    什么是访问者模式 另一个例子 双重分发 开闭原则 对扩展开放 对修改关闭 优缺点 什么是访问者模式 将数据结构与处理分离开来 比如一个人 他有自己的名字 他可以吃东西 这里的 人 就是一个数据结构 名字是属性 吃东西是行为方法 处理 pub
  • Apache Tomcat Websocket 教程

    WebSocket 是一种计算机通信协议 旨在在 Web 浏览器和 Web 服务器中实现 但它可以被任何客户端或服务器应用程序使用 WebSocket 协议是一个独立的基于 TCP 的协议 它与 HTTP 的唯一关系是它的握手被 HTTP

随机推荐

  • 过来人告诉你:Java学到什么程度可以找工作?

    大部分初次学习Java的同学都非常关注自己学到什么程度可以找工作就业 因为学习的目的一方面在于掌握知识 提高技能 另一方面就是就业谋生 今天笔者就来跟大家聊一聊一下Java学习到什么地步可以面试找工作 任何企业 不论大小 对于初级的Java
  • python 之 进程与线程区别、GIL锁产生背景及对Python性能的影响?python的多线程是假的,为啥还用多线程

    一 进程与线程区别 根本区别 进程是操作系统资源分配的基本单位 每个进程都有自己独立的地址空间 数据 堆栈和状态 线程是处理器任务调度和执行的基本单位 一个进程可以有多个线程 这些线程共享进程的地址空间和资源 资源开销 内存分配 进程创建新
  • linux 线程详解

    前言 程序运行在内存空间中叫进程 进程中包含有若干线程 线程是系统调度和执行的基本单位 线程才是程序运行的实体 通常程序里的main 函数就相当于主线程 把进程理解成一个容器 里面可以包含有若干线程和若干资源 进程环境变量 打开的文件描述符
  • RabbitMQ学习笔记3-Java连接rabbitmq

    Java连接rabbitmq 新建工程 Pom配置 代码 演示如何通过java连接rabbitmq 此代码为后面获取rabbitmq连接的工具代码 新建工程 新建一个maven project工程 名字为rabbitmq demo Pom配
  • Objective-C实现链式编程语法(DSL)

    您越着急开始写代码 代码就会花费越长的时间 Carlson University of Wisconsin 前言 熟悉Objective C这一门编程语言的人都知道 Objective C中方法的调用都是通过中括号 实现的 比如 self
  • 【1day】复现锐捷 NBR 路由器 存在任意文件上传漏洞

    注 该文章来自作者日常学习笔记 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与作者无关 目录 一 漏洞描述 二 影响版本 三 资产测绘 四 漏洞复现 一 漏洞
  • 【Maven】添加ueditor到maven本地仓库

    命令行下执行 mvn install install file Dfile Users yqj Downloads utf8 jsp jsp lib ueditor 1 1 2 jar DgroupId com baidu ueditor
  • jq中寻找某个元素的特定兄弟元素

    利用var items this nextAll eq 2 text 举例如下 html代码 div class add div
  • 双管齐下,阿里内部都用的 Spring+MyBatis 源码手册,实战理论两不误

    目前大部分的 Java 互联网项目 都是用 Spring MVC Spring MyBatis 搭建平台的 使用 Spring IoC 可以有效的管理各类的 Java 资源 达到即插即拔的功能 通过 Spring AOP 框架 数据库事务可
  • AD——PCB布线实用技巧

    目录 一 元件布局基本规则 二 元件布线规则 三 在研制带处理器的电子产品时 如何提高抗干扰能力和电磁兼容性 一 元件布局基本规则 1 按电路模块进行布局 实现同一功能的相关电路称为一个模块 电路模块中的元件应采用就近 集中原则 同时数字电
  • 《JAVA核心知识》学习笔记(3. JAVA 集合)-2

    3 JAVA 集合 3 1 接口继承关系和实现 集合类存放于 Java util 包中 主要有 3 种 set 集 list 列表包含 Queue 和 map 映射 1 Collection Collection 是集合 List Set
  • Java web前端——JavaScript基础使用

    JavaScript概述 1 1 JavaScript简介 JavaScript LiveScript 一种解释性脚本语言 是一种动态类型 弱类型 基于原型继承的语言 内置支持类型 它的解释器被称为JavaScript引擎 为浏览器的一部分
  • 普通人如何抓住AI这个风口?

    无论是现在大火的AI 去年大火的元宇宙 虚拟炒房 还有之前的虚拟货币 疯狂的股市等等 普通人真正从中获得收益的 都是少数 风口其实本来就是少数人造富的神话 上一个10年的移动互联网风口 真正抓住的企业 也就那么几家 过去5年轰轰烈烈的新能源
  • Unity接入Huawei AR Engine

    说在前面 使用Unity进行AR开发的开发者基本都会遇到华为手机的坎 由于谷歌的制裁 ARCore并不能覆盖华为的新机型导致新的机型已经不能使用ARFoundation方案 使用第三方通用的ARsdk也并不能完美兼容常用的华为机型 毕竟官方
  • Linux软链接和硬链接

    1 Linux链接概念 Linux链接分两种 一种被称为硬链接 Hard Link 另一种被称为符号链接 Symbolic Link 默认情况下 ln命令产生硬链接 硬连接 硬连接指通过索引节点来进行连接 在Linux的文件系统中 保存在磁
  • Sublime Text 4(Build 4126)下载注册 及 修改运行配置为终端运行(C/C++、Java、Python)

    目录 一 Sublime Text 4 Build 4126 下载 二 Sublime Text 4 Build 4126 注册 三 修改配置 cmd运行程序 以 C 为例 1 MinGW编译器下载及安装 2 修改配置 四 参考以上步骤 对
  • 计算机分盘的时候c盘留多少,win10分区c盘留多大合适

    重装系统的时候一定会经历的一个过程就是磁盘分区 c盘也就是我们常说的系统盘 那么win10分区的时候c盘该留多少内存合适呢 下面就让小编来告诉你 win10分区c盘留多大合适 如果用户不打算将软件装在C盘 推荐C盘分区60到80GB 分区分
  • webpack基础教学,简单易懂(一)(什么是webpack以及webpack的基本使用)

    前端工程化webapck 什么是前端工程化 前端工程化指的是 在企业级的前端项目开发中 把前端开发所需的工具 技术 流程 经验等进行规范化 标准化 前端工程化的解决方案 早期的前端工程化解决方案 grunt https www gruntj
  • 【知识图谱】神经网络综述

    概述 近年来随着计算机硬件的发展 神经网络作为机器学习中不可获取的一部分在预测 分类 图像分割 识别等方向得到了极其广的应用 然而其网络模型多 数学基础涉及广 使得其门槛较高 好在目前有诸如tensorflow pytorch sklear
  • 【从零开始学习JAVA

    目录 前言 BigInterger BigInteger常见的方法 总结 前言 本篇我们将介绍BigInteger这个比较实用一点的API 这个API在我们实际写项目中都是很实用的API 因此大家应该对这个API有更加熟练的掌握 BigIn