【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!
目录
一、BigInteger类简单介绍
二、BigInteger构造方式
(1)构造方式
(2)输入方式
三、BigInteger常见的成员方法
(1)方法介绍
(2)方法使用演示
1.加减乘除余
2.比较
3.绝对值和幂
4.转换成对应进制字符串
四、BigInteger不常见的成员方法
起因是做了一道牛客oj题,链接指路☞三角形__牛客网,明明是一道超级简单的判断两边之和是否大于第三边,可是哪怕把数据类型改成long,仍然不能通过∑(っ°Д°;)っ。这时候就需要我们超级好用的大数字运算BigInteger啦。本文详细整理了BigInteger类的常见用法!欢迎享用(✪ω✪)~~~
一、BigInteger类简单介绍
我们都知道Integer的存储范围是-2^31~2^31-1(-2147483648~2147483647),当我们要存储比Integer更大的数字时,java中就为我们提供了一个BigInteger类,方便我们去处理更大的数。
BigInteger 类支持任意精度的整数,也就是说在运算中 BigInteger 类可以准确地表示任何大小的整数值。首先除了基本的操作加、减、乘、除,在该类中还封装了其他很有用的操作,接下来将一一介绍。
二、BigInteger构造方式
(1)构造方式
很显然,BigInteger是一个封装类,就跟String类是一样的。使用时需要导入 import java.math.BigInteger;使用 BigInteger 类,首先要创建一个 BigInteger 对象。BigInteger是一个有参构造,需要传入一个参数,最常见的就是给定一个字符串,使用构造方法public BigInteger(String val)构造一个十进制的BigInteger对象。
小贴士:该构造方法可以发生NumberFormatException异常,当字符串参数val中如果含有非数字字符就会发生该异常。
import java.math.BigInteger;/** BigInteger演示*/
public class Test {public static void main(String[] args) {BigInteger bigInteger=new BigInteger("1123");}
}
(2)输入方式
普通输入:
Scanner sc=new Scanner(System.in);
BigInteger a=sc.BigIntegerNext();
循环输入 :
while (sc.hasNextBigInteger()) { // 注意 while 处理多个 case}
除了定义实例,我们也可以像使用String类那样使用BigInteger类,给大家一个题目感受一下,该题就是本文开头所提及的三角形求解。
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
/** 三角形*/
public class Triangle {public static void main(String[] args) {Scanner sc=new Scanner(System.in);while (sc.hasNextBigInteger()) { // 注意 while 处理多个 caseBigInteger []triangle=new BigInteger[3];for(int i=0;i<3;i++) {triangle[i]=sc.nextBigInteger();}Arrays.sort(triangle);if(triangle[0].add(triangle[1]).compareTo(triangle[2])>0) {System.out.println("Yes");}else {System.out.println("No");}}}
}
三、BigInteger常见的成员方法
(1)方法介绍
| 方法名 | 含义 |
| public BigInteger add(BigInteger val) | 返回当前大整数对象与参数指定的大整数对象的和。 |
| public BigInteger subtract(BigInteger val) | 返回当前大整数对象与参数指定的大整数对象的差。 |
| public BigInteger multiply(BigInteger val) | 返回当前大整数对象与参数指定的大整数对象的积。 |
| public BigInteger divide(BigInteger val) | 返回当前大整数对象与参数指定的大整数对象的商。 |
| public BigInteger remainder(BigInteger val) | 返回当前大整数对象与参数指定的大整数对象的余。 |
| public int compareTo(BigInteger val) | 返回当前大整数对象与参数指定的大整数的比较结果, 返回值是1、-1或0,分别表示当前 大整数对象大于、小于或等于参数指定的大整数。 |
| public BigInteger abs() | 返回当前大整数对象的绝对值。 |
| public BigInteger pow(int a) | 返回当前大整数对象的a次幂。 |
| public String toString() | 返回当前大整数对象十进制的字符串表示。 |
| public String toString(int p) | 返回当前大数对象p进制的字符串表示。 |
(2)方法使用演示
1.加减乘除余
import java.math.BigInteger;
import java.util.Scanner;/** BigInteger演示*/
public class Test {public static void main(String[] args) {Scanner sc=new Scanner(System.in);BigInteger a=sc.nextBigInteger();BigInteger b=sc.nextBigInteger();System.out.println(a.add(b));//加System.out.println(a.subtract(b));//减System.out.println(a.multiply(b));//乘System.out.println(a.divide(b));//除System.out.println(a.remainder(b));//余 }
}
看结果对于超大数字,也是完美计算结果的。

2.比较
import java.math.BigInteger;
import java.util.Scanner;/** BigInteger演示*/
public class Test {public static void main(String[] args) {Scanner sc=new Scanner(System.in);BigInteger a=sc.nextBigInteger();BigInteger b=sc.nextBigInteger();System.out.println(a.compareTo(b));}
}
a>b返回结果为1。

3.绝对值和幂
import java.math.BigInteger;
import java.util.Scanner;/** BigInteger演示*/
public class Test {public static void main(String[] args) {Scanner sc=new Scanner(System.in);BigInteger a=sc.nextBigInteger();BigInteger b=sc.nextBigInteger();System.out.println(a.abs());System.out.println(b.pow(100));}
}

4.转换成对应进制字符串
import java.math.BigInteger;
import java.util.Scanner;/** BigInteger演示*/
public class Test {public static void main(String[] args) {Scanner sc=new Scanner(System.in);BigInteger a=sc.nextBigInteger();BigInteger b=sc.nextBigInteger();String strTen=a.toString();String strTwo=b.toString(2);System.out.println(strTen);System.out.println(strTwo);}
}

四、BigInteger不常见的成员方法
上面是我们经常会使用的一些常见方法,当然BigInteger中还有许多好用但不常见的方法,现整理分享给大家!
下面的方法都是指二进制
| 方法名 | 含义 |
| public BigInteger shiftLeft(int n) | 左移一个比特位,*2 |
| public BigInteger shiftRight(int n) | 右移一个比特位,/2 |
| public BigInteger and(BigInteger val) | &和 |
| public BigInteger or(BigInteger val) | |或 |
| public BigInteger xor(BigInteger val) | ^异或 |
| public BigInteger not() | ~取反 |
| public BigInteger andNot(BigInteger val) | &~ 先取和再取反 |
| public boolean testBit(int n) | 从0开始,第n位如果是1,则返回true,否则位false ,必须是正数 |
| public BigInteger setBit(int n) | 将第n 位置1 |
| public BigInteger clearBit(int n) | 将第n 位置0 |
| public BigInteger flipBit(int n) | 如果第n为原来是1,则置0;如果第n为原来是0,则置1; |
| public int getLowestSetBit() | 寻找到第一个不为零数的 0的个数。如7->0111,则是4 |
| public int bitLength() | 返回位长,不包含符号位。如7->0111,则是3 |
| public int bitCount() | 补码表中和符号位不同的个数。如7->0111,则是3 |
如果觉得有用的话,就点个赞吧~

相关文章:
【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!
目录 一、BigInteger类简单介绍 二、BigInteger构造方式 (1)构造方式 (2)输入方式 三、BigInteger常见的成员方法 (1)方法介绍 (2)方法使用演示 1.加减乘除余 2.比较 3.绝…...
运维是不是没有出路了?
瑞典马工的《是时候让运维集体下岗了》一出,就让运维人为之一颤,人人自危。文章开篇就提到:明人不说暗话,在云原生和DevOps成熟的今天,运维作为一个岗位和团队已经完成了历史任务,应该退出舞台了…...
【C++笔试强训】第七天
选择题 解析:内联函数(inline)一般用于代码较少,代码块里面没有递归且频繁调用的函数,是一种以空间换时间(不是指内存,而是指令变多编译出来的可执行程序会变大)的做法。内联函数在预…...
mysql binlog 一直追加写,磁盘满了怎么办?
文章目录 mysql binlog 清理策略1、设置binlog最大的文件数和文件大小2、定时清理过期binlog文件3、手动清理binlog文件4、禁用或启用binlogmysql binlog用于记录mysql数据库所有变更(数据库的DDL、DML操作)包括用户执行的语句,以及底层引擎所执行的操作的二进制日志,主要用…...
缓存穿透、缓存雪崩、缓存击穿解决方案
什么是缓存 缓存就是数据交换的缓冲区(称作Cache),是存贮数据的临时地方,一般读写性能较高。 添加 redis 缓存 给店铺类型查询业务添加缓存 需求:添加ShopTypeController中的queryTypeList方法,添加查询缓存 缓存更新…...
web + servlet + jdbc mysql 实现简单的表单管理界面
目录数据库创建数据库连接servlet创建,这里注意一下我的数据库我自己改了一下名字lhx网页html运行文件目录展示首先我们准备好开发使用的工具以及配置 idea2020 tomcat8.5 创建javaweb参考idea编译Tomcat详细步骤 IDEA通过JDBC连接数据库请参考jdbc连接数据库 需要登陆注册界面…...
Maven 国内镜像仓库
镜像仓库目标 当我们未定义任何远程仓库时,使用 Maven 更新依赖时,其会去默认远程仓库中拉取,默认远程仓库 是国外地址,所以在国内访问特别慢,想提升访问速度,需要将国外地址换成国内地址 更换仓库地址的…...
day21 ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先
二叉搜索树的最小绝对差 二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树,它的每个节点都满足以下条件: 左子树上所有节点的值均小于该节点的值;右子树上所有节点的值均大于该节点的值&#…...
大学计算机(软件类)专业推荐竞赛 / 证书 官网及赛事相关信息整理
大学计算机专业(软件)推荐竞赛 / 证书 官网及赛事相关信息 一、算法类(丰富简历): 1、ACM国际大学生程序设计竞赛: 官网:https://icpc.global/ 国内:http://icpc.pku.edu.cn/index.htm 报名方式:区域预赛一般每年9-1…...
Metasploit入门到高级【第九章】
预计更新第一章:Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章:Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章:Metasploit 基础 Metasploit 的基本概念Met…...
JDK之8后: 协程? 虚拟线程!!!
特性官方文档: https://openjdk.org/jeps/436 Java协程 近三十年来,Java 开发人员一直依赖线程作为并发服务器应用程序的构建块。每个方法中的每个语句都在线程内执行,并且由于 Java 是多线程的,因此多个执行线程同时发生。线程是Java的并发…...
体验 jeecg
体验 jeecg官网地址事前准备安装升级 node 和 npm 版本验证安装安装 pnpm clidocker 启动 MySQLdocker 启动 redisgit clone 项目启动JAVA项目 jeecg-boot启动Vue3项目 jeecgboot-vue3官网地址 http://www.jeecg.com/ 事前准备 (1) 为了回避Could not find artifact com.mic…...
投稿指南【NO.13】计算机学会CCF推荐期刊和会议分享(人工智能)
前 言国内高等院校研究生及博士毕业条件需要发表高水平期刊或者顶会(清北上交等重点学校毕业要求为至少发一篇顶会),很多同学私信问到一级学会的会议论文怎么找、是什么,比如前段时间放榜的CVPR论文就是人工智能领域的顶会国际会议…...
一份sql笔试
1、 select substr(time,1,10),count(order_id),count(distinct passenger_id) from order where substr(time,1,7)2023-08 group by substr(time,1,10) order by substr(time,1,10);2、 select city_id from (select * from order where substr(time,1,7) 2022-08) t1 left j…...
交换瓶子
交换瓶子 贡献者:programmer_ada 有N个瓶子,编号 1 ~ N,放在架子上。 比如有5个瓶子: 2 1 3 5 4 要求每次拿起2个瓶子,交换它们的位置。 经过若干次后,使得瓶子的序号为: 1 2 3 4 5 对于这么…...
二、Docker安装、启动、卸载、示例
Docker 支持 CentOS 6 及以后的版本,可以直接通过yum进行安装: 使用流程:启动主机 – 启动Docker服务 – 下载容器镜像 – 启动镜像得一个到容器 – 进入容器使用我们想要的程序 主机一般是Linux、Utuban 以下主机系统以CentOS7为例子&#…...
开心档之C++ STL 教程
C STL 教程 目录 C STL 教程 实例 在前面的章节中,我们已经学习了 C 模板的概念。C STL(标准模板库)是一套功能强大的 C 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构…...
Thread 类的基本用法
文章目录一、线程创建1.1 Thread的常见构造方法2.1 创建线程二、线程中断2.1 Thread的几个常见属性2.2 中断线程三、线程等待四、线程休眠五、获取线程实例一、线程创建 1.1 Thread的常见构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用Runnable对象创建线…...
2023.3.28 天梯赛训练赛补题(病毒溯源 , 龙龙送外卖 , 红色警报)
文章目录1.病毒溯源问题:求树的最长链长度和字典序最小的最长链思路:2.龙龙送外卖思路:3.红色警报:思路:1.病毒溯源 问题:求树的最长链长度和字典序最小的最长链 思路: 一开始用 bfs 做的 &a…...
917. 仅仅反转字母
917. 仅仅反转字母https://leetcode.cn/problems/reverse-only-letters/ 难度简单189 给你一个字符串 s ,根据下述规则反转字符串: 所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。 返回反转后的 s 。 示例…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
