我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于Java大整数运算之BigInteger类

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于Java大整数运算之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;

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;

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;

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;

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;

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类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于Java大整数运算之BigInteger类

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于Java大整数运算之BigInteger类

这篇文章主要介绍了关于Java大整数运算之BigInteger类,BigInteger提供高精度整型数据类型及相关操作,所有操作中,都以二进制补码形式表示,需要的朋友可以参考下
2023-05-19

怎么在Java项目中利用BigInteger 实现大数字运算

这篇文章给大家介绍怎么在Java项目中利用BigInteger 实现大数字运算,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 在 Java 中,有许多数字处理的类,比如 Integer 类。但是Inte
2023-05-31

使用Java怎么实现两个大数之间的运算

这期内容当中小编将会给大家带来有关使用Java怎么实现两个大数之间的运算,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。大数相减import java.util.Scanner;/* 进行大数相减,只能对两
2023-05-30

Java常用数字工具类 大数乘法、加法、减法运算(2)

上篇分享了一下数字转汉字的小功能,这里再分享一下大数相乘、相加、相减的功能。其他的不做过多的铺垫了,我先讲一下各个功能的计算原理。Ⅰ. 乘法运算为什么先说乘法运算——因为我先做了乘法运算。其实思路也是很多的,但是最终我参考了网络上的一种计算
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录