关于Java大整数运算之BigInteger类

 更新时间:2023年05月08日 11:25:12   作者:小熊爱吃软糖吖  
这篇文章主要介绍了关于Java大整数运算之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 处理多个 case
	            BigInteger []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大整数运算之BigInteger类的文章就介绍到这了,更多相关Java大整数BigInteger类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Java SpringBoot的前后端分离信息管理系统的设计和实现

    基于Java SpringBoot的前后端分离信息管理系统的设计和实现

    当今社会,人才的流动速度大大增加,因此也对党建工作的管理层面工作带来了空前且复杂的挑战,从而使得如何高效的开展管理党建工作成为了亟待解决的问题。本文将介绍通过Java SpringBoot实现前后端分离信息管理系统,感兴趣的同学可以了解一下
    2021-11-11
  • SpringCloud GateWay动态路由用法

    SpringCloud GateWay动态路由用法

    网关作为所有项目的入口,不希望重启,因此动态路由是必须的,动态路由主要通过RouteDefinitionRepository接口实现,其默认的实现是InMemoryRouteDefinitionRepository,即在内存中存储路由配置,可基于这个map对象操作,动态路由的实现方案有两种
    2024-10-10
  • protobuf简介及使用流程

    protobuf简介及使用流程

    本文介绍了Protocol Buffers(protobuf)的数据结构序列化和反序列化框架,包括其特点、使用流程和快速上手,通过一个简单的通讯录示例,展示了如何创建.proto文件、添加注释、编写消息定义、编译.proto文件以及进行序列化和反序列化操作,感兴趣的朋友一起看看吧
    2025-02-02
  • IDEA关于.properties资源文件的编码调整问题

    IDEA关于.properties资源文件的编码调整问题

    这篇文章主要介绍了IDEA关于.properties资源文件的编码调整问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Springboot注解之@EnableAutoConfiguration详解

    Springboot注解之@EnableAutoConfiguration详解

    这篇文章主要介绍了Springboot注解之@EnableAutoConfiguration详解,@EnableAutoConfiguration是一个加载Starter目录包之外的需要Spring自动生成bean对象,本文对其进行总结,需要的朋友可以参考下
    2023-08-08
  • Java中Volatile关键字详解及代码示例

    Java中Volatile关键字详解及代码示例

    这篇文章主要介绍了Java中Volatile关键字详解及代码示例,分为两个部分,第一部分介绍了Volatile关键字的基本概念等内容,第二部分分享了实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 实例讲解Java的Spring框架中的控制反转和依赖注入

    实例讲解Java的Spring框架中的控制反转和依赖注入

    这篇文章主要介绍了Java的Spring框架中的控制反转和依赖注入,Spring是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2016-02-02
  • Java导出txt文件的方法

    Java导出txt文件的方法

    这篇文章主要介绍了Java导出txt文件的方法,实例分析了两种java导出txt文本文件的使用技巧,需要的朋友可以参考下
    2015-05-05
  • java中out.print和out.write的方法

    java中out.print和out.write的方法

    本文用一个小例子说明java out.print和out.write的方法,大家参考使用吧
    2013-11-11
  • 配合Swagger使用绝佳的两款直观易用JSON可视化工具

    配合Swagger使用绝佳的两款直观易用JSON可视化工具

    这篇文章主要为大家介绍了配合Swagger使用绝佳的两款直观易用JSON可视化工具图文详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论