当前位置: 首页 > news >正文

【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构造方式 &#xff08;1&#xff09;构造方式 &#xff08;2&#xff09;输入方式 三、BigInteger常见的成员方法 &#xff08;1&#xff09;方法介绍 &#xff08;2&#xff09;方法使用演示 1.加减乘除余 2.比较 3.绝…...

运维是不是没有出路了?

瑞典马工的​​《是时候让运维集体下岗了》一出&#xff0c;就让运维人为之一颤&#xff0c;​人人自危。文章开篇就提到&#xff1a;​​明人不说暗话&#xff0c;在云原生和DevOps成熟的今天&#xff0c;运维作为一个岗位和团队已经完成了历史任务&#xff0c;应该退出舞台了…...

【C++笔试强训】第七天

选择题 解析&#xff1a;内联函数&#xff08;inline&#xff09;一般用于代码较少&#xff0c;代码块里面没有递归且频繁调用的函数&#xff0c;是一种以空间换时间&#xff08;不是指内存&#xff0c;而是指令变多编译出来的可执行程序会变大&#xff09;的做法。内联函数在预…...

mysql binlog 一直追加写,磁盘满了怎么办?

文章目录 mysql binlog 清理策略1、设置binlog最大的文件数和文件大小2、定时清理过期binlog文件3、手动清理binlog文件4、禁用或启用binlogmysql binlog用于记录mysql数据库所有变更(数据库的DDL、DML操作)包括用户执行的语句,以及底层引擎所执行的操作的二进制日志,主要用…...

缓存穿透、缓存雪崩、缓存击穿解决方案

什么是缓存 缓存就是数据交换的缓冲区&#xff08;称作Cache&#xff09;,是存贮数据的临时地方&#xff0c;一般读写性能较高。 添加 redis 缓存 给店铺类型查询业务添加缓存 需求&#xff1a;添加ShopTypeController中的queryTypeList方法&#xff0c;添加查询缓存 缓存更新…...

web + servlet + jdbc mysql 实现简单的表单管理界面

目录数据库创建数据库连接servlet创建,这里注意一下我的数据库我自己改了一下名字lhx网页html运行文件目录展示首先我们准备好开发使用的工具以及配置 idea2020 tomcat8.5 创建javaweb参考idea编译Tomcat详细步骤 IDEA通过JDBC连接数据库请参考jdbc连接数据库 需要登陆注册界面…...

Maven 国内镜像仓库

镜像仓库目标 当我们未定义任何远程仓库时&#xff0c;使用 Maven 更新依赖时&#xff0c;其会去默认远程仓库中拉取&#xff0c;默认远程仓库 是国外地址&#xff0c;所以在国内访问特别慢&#xff0c;想提升访问速度&#xff0c;需要将国外地址换成国内地址 更换仓库地址的…...

day21 ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

二叉搜索树的最小绝对差 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种特殊的二叉树&#xff0c;它的每个节点都满足以下条件&#xff1a; 左子树上所有节点的值均小于该节点的值&#xff1b;右子树上所有节点的值均大于该节点的值&#…...

大学计算机(软件类)专业推荐竞赛 / 证书 官网及赛事相关信息整理

大学计算机专业(软件)推荐竞赛 / 证书 官网及赛事相关信息 一、算法类(丰富简历)&#xff1a; 1、ACM国际大学生程序设计竞赛&#xff1a; 官网&#xff1a;https://icpc.global/ 国内&#xff1a;http://icpc.pku.edu.cn/index.htm 报名方式&#xff1a;区域预赛一般每年9-1…...

Metasploit入门到高级【第九章】

预计更新第一章&#xff1a;Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章&#xff1a;Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章&#xff1a;Metasploit 基础 Metasploit 的基本概念Met…...

JDK之8后: 协程? 虚拟线程!!!

特性官方文档: https://openjdk.org/jeps/436 Java协程 近三十年来&#xff0c;Java 开发人员一直依赖线程作为并发服务器应用程序的构建块。每个方法中的每个语句都在线程内执行&#xff0c;并且由于 Java 是多线程的&#xff0c;因此多个执行线程同时发生。线程是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推荐期刊和会议分享(人工智能)

前 言国内高等院校研究生及博士毕业条件需要发表高水平期刊或者顶会&#xff08;清北上交等重点学校毕业要求为至少发一篇顶会&#xff09;&#xff0c;很多同学私信问到一级学会的会议论文怎么找、是什么&#xff0c;比如前段时间放榜的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…...

交换瓶子

交换瓶子 贡献者&#xff1a;programmer_ada 有N个瓶子&#xff0c;编号 1 ~ N&#xff0c;放在架子上。 比如有5个瓶子&#xff1a; 2 1 3 5 4 要求每次拿起2个瓶子&#xff0c;交换它们的位置。 经过若干次后&#xff0c;使得瓶子的序号为&#xff1a; 1 2 3 4 5 对于这么…...

二、Docker安装、启动、卸载、示例

Docker 支持 CentOS 6 及以后的版本&#xff0c;可以直接通过yum进行安装&#xff1a; 使用流程&#xff1a;启动主机 – 启动Docker服务 – 下载容器镜像 – 启动镜像得一个到容器 – 进入容器使用我们想要的程序 主机一般是Linux、Utuban 以下主机系统以CentOS7为例子&#…...

开心档之C++ STL 教程

C STL 教程 目录 C STL 教程 实例 在前面的章节中&#xff0c;我们已经学习了 C 模板的概念。C STL&#xff08;标准模板库&#xff09;是一套功能强大的 C 模板类&#xff0c;提供了通用的模板类和函数&#xff0c;这些模板类和函数可以实现多种流行和常用的算法和数据结构…...

Thread 类的基本用法

文章目录一、线程创建1.1 Thread的常见构造方法2.1 创建线程二、线程中断2.1 Thread的几个常见属性2.2 中断线程三、线程等待四、线程休眠五、获取线程实例一、线程创建 1.1 Thread的常见构造方法 方法说明Thread()创建线程对象Thread(Runnable target)使用Runnable对象创建线…...

2023.3.28 天梯赛训练赛补题(病毒溯源 , 龙龙送外卖 , 红色警报)

文章目录1.病毒溯源问题&#xff1a;求树的最长链长度和字典序最小的最长链思路&#xff1a;2.龙龙送外卖思路&#xff1a;3.红色警报&#xff1a;思路&#xff1a;1.病毒溯源 问题&#xff1a;求树的最长链长度和字典序最小的最长链 思路&#xff1a; 一开始用 bfs 做的 &a…...

917. 仅仅反转字母

917. 仅仅反转字母https://leetcode.cn/problems/reverse-only-letters/ 难度简单189 给你一个字符串 s &#xff0c;根据下述规则反转字符串&#xff1a; 所有非英文字母保留在原有位置。所有英文字母&#xff08;小写或大写&#xff09;位置反转。 返回反转后的 s 。 示例…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...