【从零开始学习JAVA | 第二十二篇】BigInteger

news2024/11/17 0:29:29

目录

 前言:

 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类提供了一种简单、可靠的处理大数字的方法,可以方便我们进行精密计算。

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

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

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

相关文章

sublime text 打开 txt 文档乱码问题

对于 windows 系统使用系统自带的 txt 编辑工具&#xff0c;默认打开和保存文件的文件的格式是 GBK 或者 GB2312&#xff0c;而 sublime 默认仅支持 utf-8&#xff0c;所以当从 windows 系统拷贝文件在 mac 上浏览有时候会出现乱码的问题&#xff0c;这时候就需要安装插件使 su…

RDBMS 与 非RDBMS

RDBMS vs 非RDBMS 前言一、关系型数据库(RDBMS)1、实质2、优势 二、非关系型数据库(非RDBMS)1、介绍2、有哪些非关系型数据库3、NoSQL的演变4、小结 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注博主&#xff01;…

基于uni-app+vue3跨端「h5+小程序+App」仿制chatGPT模板实例

uni-chatgpt 一款uniappvite4uview-plus多端ChatGPT模板实例。 全新首发的一款多端仿制chatgpt智能对话实战项目&#xff0c;基于uniAppVue3PiniauViewUIMarkdownIt等技术开发搭建项目。支持编译到h5小程序APP端&#xff0c;支持markdown语法解析及代码高亮。 功能特点 全屏沉…

LinkedList的底层实现原理(JDK8)

目录 一、知识点回顾二、LinkedList 的 add() 和 remove() 的实现2.1 list.add(e) 实现原理2.2 list.remove(e) 实现原理 一、知识点回顾 双向链表特点&#xff1a; 区间离散&#xff0c;占用内存宽松&#xff0c;空间复杂度小&#xff0c;时间复杂度 O(n)。优点&#xff1a;…

Android Jetpack Compose —— FloatingActionButton

FloatingActionButton 通常用于呈现应用程序的主要操作或常用操作&#xff0c;并具有显著的圆形形状和浮动的定位。FloatingActionButton 提供了一种简单而优雅的方式来引导用户进行主要的应用程序交互&#xff0c;例如开始一个新的任务、分享内容、启动一个动作等。它在应用程…

Java——《面试题——Zookeeper篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

FreeRTOS 中断管理之延迟中断处理 -- 二值信号量同步

3.1 概览 3.1.1 事件&#xff1a;嵌入式实时操作系统需要对整个系统环境产生的事件作出反应&#xff0c;例如&#xff1a;按一下按键&#xff0c;灯闪一下 3.1.2 ISR 中断服务函数尽量越短越好&#xff0c;应快速执行完&#xff0c;然后退出中断服务函数 3.1.3 在中断服务函…

Web3在HTML中获取 MetaMask 启用的用户列表

当然 我们还是要先启动ganache环境 然后 通过MetaMask 导入一些用户 然后 我们需要在页面中引入 web3.min.js 如果您还没有这个文件 可以查看我的文章web3.js获取导入 然后我访问官网 https://learnblockchain.cn/docs/web3.js/web3-eth.html#getchainid 打开后 先来到 web3.…

OAuth2.0四种授权模式及实战

OAuth2.0四种授权模式以及Oauth2.0实战 首先我们得了解什么是Oauth2.0&#xff0c;简单来说Oauth2.0它是一个授权协议。我们可能会听说过&#xff0c;使用Oauth2.0来实现单点登录SSO&#xff0c;以及第三方登录。那个什么是授权&#xff1f; 举个通俗易懂的例子&#xff0c;就…

概率论与数理统计教程第六章节笔记

参考书籍&#xff1a;概率论与数理统计教程第三版 茆诗松 程依明 濮晓龙 编著 文章声明&#xff1a;如有错误还望批评指正 文章目录 ξ \xi ξ 6.1点估计的概念与无偏性 ξ 6.2 \xi6.2 ξ6.2矩估计及相和性 ξ 6.3 \xi6.3 ξ6.3最大似然估计与EM算法 ξ 6.6 \xi6.6 ξ6.6区间估…

Pandas 解决保存excel文件发生异常问题

代码&#xff1a; #保存excel my.to_excel(df.xlsx,#设置Excel1的工作表名sheet_name表1) 异常&#xff1a; 原因&#xff1a;没有导入这个库openpyxl 解决&#xff1a; 1) 使用 pip list 查看 2) 如果没有&#xff0c;则安装 pip install openpyxl 3) 再导入 import openpyx…

uniapp中引入uview教程

uview官网&#xff0c;本次教程中用不到&#xff0c;若需要查看官网教程&#xff0c;可点击前往 1、在插件市场中搜索uview&#xff0c;并导入项目&#xff0c;点击前往 2、如果没有安装scss&#xff0c;需要安装scss依赖&#xff0c;如已安装&#xff0c;请跳过 // 安装sass…

【刷题笔记】反转链表——头插法/栈实现

【刷题笔记】反转链表——头插法/栈实现 解法一&#xff1a;头插法 思路及代码&#xff1a; * 1、创建一个newheadnull&#xff0c;即最终反转后的链表的头结点* 2、循环遍历当前的链表的head&#xff0c;创建temp记录当前head的next&#xff0c;然后将head的next指向新的头ne…

Acer宏碁Swift笔记本电脑SF314-54原装Win10系统工厂模式恢复原厂OEM出厂系统镜像

Acer宏基&#xff0c;Acer宏碁Swift笔记本电脑&#xff0c;Swift SF314-54原装Windows10系统工厂模式恢复原厂OEM出厂状态镜像 系统自带所有驱动、Office办公软件、出厂主题壁纸LOGO、 Acer Care Center、Quick Access等预装程序 所需要工具&#xff1a;32G或以上的U盘&#…

springboot+vue高校科研队伍管理系统_2byeq-

1.登录和注册&#xff1a;创建用户密码后用户输入正确用户密码即可登录&#xff0c;超级管理员可查看平台内所有账号信息。 2.个人信息管理&#xff1a;支持修改个人信息以及保存。 3.科研队伍管理&#xff1a;支持创建科研队伍&#xff0c;个人可以创建队伍后自己成为组长&…

uniapp倒计时

uniapp实现根据传递的时间展示倒计时 需求说明&#xff1a;听书倒计时&#xff0c;设置完时间展示倒计时 countDownTime(showTime){ //showTime为传递的时间 默认在转化成分钟var that this;that.times showTime * 60that.timer setInterval(function() {that.times--;if(th…

教程 | Datavines 自定义数据质量检查规则(Metric)

Metric 是 Datavines 中一个核心概念&#xff0c;一个 Metric 表示一个数据质量检查规则&#xff0c;比如空值检查和表行数检查都是一个规则。Metric 采用插件化设计&#xff0c;用户可以根据自己的需求来实现一个 Metric。下面我们来详细讲解一下如何自定义Metric。 第一步 …

WPF 零基础入门笔记(3):数据绑定详解(更新中)

文章目录 文章合集数据绑定数据绑定实战事件通知型数据驱动&#xff0c;双向绑定资源绑定数据源绑定全局数据源后端和前端绑定问题 文章合集 WPF基础知识博客专栏 WPF微软文档 WPF控件文档 B站对应WPF数据绑定视频教程 数据绑定 我们在之前的文章中&#xff0c;详细解释了数…

windows配置jmeter定时任务

场景&#xff1a; 需要让脚本在指定的执行 步骤&#xff1a; 准备jmeter脚本&#xff0c;保证在命令行中可以调用脚本且脚本运行正常&#xff1a;"C:\Apache\jmeter\bin\jmeter.bat" -n -t C:\tests\test_plan.jmx -l C:\tests\results.jtl -t : 指定执行jmeter脚…

chatgpt赋能python:Python计算CCI指标的介绍

Python计算CCI指标的介绍 CCI&#xff08;Commodity Channel Index&#xff09;是一种技术指标&#xff0c;是推断价格高低位和趋势变化的一种工具。通过计算股票、期货、外汇和其他市场的典型价格、最高价和最低价以及CCI的值&#xff0c;可以预测未来价格趋势并进行交易。 …