【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!

这篇具有很好参考价值的文章主要介绍了【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 处理多个 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));//余	
	}
}

 看结果对于超大数字,也是完美计算结果的。

【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!

 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。

【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!

 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));
	}
}

【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!

 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);
	}
}

【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!

 四、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类超级好用!!!文章来源地址https://www.toymoban.com/news/detail-413416.html

到了这里,关于【Java】关于你不知道的Java大整数运算之BigInteger类超级好用!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学Java线程,你不知道什么是AQS?一文带你进入Java多线程同步的灵魂-AbstractQueuedSynchronizer

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 我们继续总结学习 Java基础知识 ,温故知新。 CLH(Craig, Landin, and Hagersten locks)是一种自旋锁,能确保无饥饿性,提

    2024年02月16日
    浏览(31)
  • 你不知道的 ES2023

    6 月 27 日 ECMA 大会批准了 ECMAScript 2023 (es14)规范,意味着新的一些语法将正式成为标准。下面来看看 ECMAScript 2023 有哪些值得我们关注的新特性。 具体相关提案原文详情可以跳转:已完成提案 •从后往前查找数组 •Hashbang 语法 •Symbol 类型作为 WeakMap 类型的键 •不改变原数组

    2024年02月15日
    浏览(62)
  • 记录--你不知道的Js高级方法

    在 Js 中有一些比较冷门但是非常好用的方法,我在这里称之为高级方法,这些方法没有被广泛使用或多或少是因为存在一些兼容性的问题,不是所有的浏览器都读得懂的。这篇文章主要就是对这些方法做一个总结,有些方法在我们开发过程中有着重要的作用,我们一起来看一

    2024年02月15日
    浏览(33)
  • 你不知道的自动装箱和拆箱

    “改天是明天,下次是每一次,以后是以后的每一天” 装箱就是自动将基本数据类型转换为包装器类型(int–Integer);调用方法:Integer的valueOf(int) 方法 拆箱就是自动将包装器类型转换为基本数据类型(Integer–int);调用方法:Integer的intValue方法 在Java SE5之前,如果要生成一个数值为

    2024年02月02日
    浏览(42)
  • 你不知道的AI绘画变现方式

    🏆 文章目标:学习AI绘画变现方式 🍀 入门篇:你不知道的AI绘画变现方式 ✅ 创作者:熊猫Jay ✨ 个人公众号: 熊猫Jay字节之旅 (文末有链接) 🍁 展望:若本篇讲解内容帮助到您,请帮忙点个赞吧,再点点您的小手关注下公众号,您的支持是我继续写作的最大动力,谢谢。🙏

    2024年02月15日
    浏览(42)
  • 无效数据大揭秘——你不知道的那些坑!

    进行数据管理时,无效数据可能会对生产力和决策质量造成严重的影响。如何发现和处理无效数据变得愈发重要。一起来唠唠各位大佬是如何处理的? 无效数据是指在某个特定领域或目的中,不符合要求或无意义的数据。它通常是由于数据收集或处理过程中的错误、不一致或

    2024年02月05日
    浏览(57)
  • 你不知道的几个JavaScript 高阶技巧

    基础: 高阶: 基础: 高阶: 基础: 高阶: 基础: 高阶: 基础: 高阶: 基础: 高阶: 基础: 高阶: 基础 高阶 更简单的方法: null 是一个  value ,然而 undefined 不是. null 像一个空盒子,但 undefined 不是. 传递 null 时, 不采用 默认值。然而,当未定义或未传递任何内容时,

    2024年02月08日
    浏览(53)
  • element - - - - - 你不知道的loading使用方式

    求人不如求己 关于页面交互,最害怕的就是接口等待时间太长,用户体验不好。 而如何提高用户体验呢? 接口返回速度 这个是后端同学去优化,前端同学也可通过 加载loading 来优化体验 Element 提供了两种调用 Loading 的方法:指令和服务 详情可查看官网 : Element Loading 加载

    2024年02月02日
    浏览(38)
  • 【MySQL】不允许你不知道如何插入数据

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 😁大家好呀,今天是我第N次写MySQL,也是最近才学习MySQL,也想着记录一

    2024年02月15日
    浏览(31)
  • 下载加速小妙招,我不允许你不知道

    在你深夜刷剧刷得最激动的时候,屏幕突然打转转…… 在你打游戏打到最精彩的团战时刻,你的网络突然404…… 在你激情澎湃,好不容易抢到心爱之物要付款的时候,页面却突然加载不出来…… 如果真要碰到这些事情,光是想一想就会让人觉得非常崩溃。想要避免这些情况

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包