Java 处理超大数类型之BigInteger案例详解

 更新时间:2021年09月11日 14:15:26   作者:温柔的谢世杰  
这篇文章主要介绍了Java 处理超大数类型之BigInteger案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

一、BigInteger介绍

如果在操作的时候一个整型数据已经超过了整数的最大类型长度 long 的话,则此数据就无法装入,所以,此时要使用 BigInteger 类进行操作。这些大数都会以字符串的形式传入。

BigInteger 相比 Integer 的确可以用 big 来形容。它是用于科学计算,Integer 只能容纳一个 int,所以,最大值也就是 2 的 31 次访减去 1,十进制为 2147483647。但是,如果需要计算更大的数,31 位显然是不够用的,那么,此时 BigInteger 就能满足我们的需求了。

BigInteger 能够容纳的位数那可就大了,我简单试了一下,上千位没有任何问题。除了容量大之外,BigInteger 还封装了一些常见的操作,比如 ±*/ 的基本操作,还有绝对值,相反数,最大公约数,是否是质数等等的运算。

二、BigInteger常见函数

  • BigInteger(String value):构造方法,
  • BigInteger add(BigInteger value):加法,
  • BigInteger subtract(BigInteger value):减法,
  • BigInteger multiply(BigInteger value):乘法,
  • BigInteger divide(BigInteger divisor):除法,
  • BigInteger modInverse(BigInteger m):求模,
  • BigInteger pow(int exponent):乘方,
  • BigInteger max(BigInteger value):最大数,
  • BigInteger min(BigInteger value):最小数,
  • BigInteger abs():绝对值,
  • BigInteger negate():相反数,
  • int intValue():转化int,将BigInteger类型数据转为int。
  • BigInteger valueOf(long val):转为BigInteger,将long类型转为BigIntege类型

示例代码

【题目】

输入一个整数 n 1<n<10^9
输出一个整数
找出其所有非空子集中所有元素个数之和,然后对 10^9+7 取模,输出结果
例如输入 2,有 {1},{2},{1,2} 3 个非空子集,所有元素个数之和为 4
输出结果为 4

思路

用 int 肯定会超,需要用到 BigInteger
对于输入 n,求得所有元素之和为 n*2^(n-1)
然后再对 10^7+7 取模即可

import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String n = sc.next();
        BigInteger res = count(new BigInteger(n));
        BigInteger m = BigInteger.valueOf(10).pow(7).add(BigInteger.valueOf(7));
        System.out.println(res.mod(m));;
    }

    // 计算公式 n*2^(n-1)
    static BigInteger count(BigInteger n) {
        return n.multiply(BigInteger.valueOf(2).pow(n.intValue()-1));
    }
}

到此这篇关于Java 处理超大数类型之BigInteger案例详解的文章就介绍到这了,更多相关Java 处理超大数类型之BigInteger内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springBoot详细讲解使用mybaties案例

    springBoot详细讲解使用mybaties案例

    MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架
    2022-05-05
  • Java实现Treap树的示例代码

    Java实现Treap树的示例代码

    本文主要介绍了Java实现Treap树的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 浅谈jvm中的垃圾回收策略

    浅谈jvm中的垃圾回收策略

    下面小编就为大家带来一篇浅谈jvm中的垃圾回收策略。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • Java注解的简单入门小案例

    Java注解的简单入门小案例

    这篇文章主要介绍了Java注解的简单入门小案例,注解是干什么的?怎么使用?注解的简单用法,需要的朋友可以参考下
    2023-04-04
  • Java 单向队列及环形队列的实现原理

    Java 单向队列及环形队列的实现原理

    本文主要介绍了Java 单向队列及环形队列的实现原理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Java实现消息轰炸的方法 附带源码

    Java实现消息轰炸的方法 附带源码

    这篇文章主要介绍了Java实现消息轰炸的方法 附带源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 深入浅析Mybatis与Hibernate的区别与用途

    深入浅析Mybatis与Hibernate的区别与用途

    这篇文章主要介绍了Mybatis与Hibernate的区别与用途的相关资料,需要的朋友可以参考下
    2017-10-10
  • 微信支付java版V3验证数据合法性(Deom)

    微信支付java版V3验证数据合法性(Deom)

    这篇文章主要介绍了微信支付java版V3验证数据合法性(Deom)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • 修改及反编译可运行Jar包实现过程详解

    修改及反编译可运行Jar包实现过程详解

    这篇文章主要介绍了如何修改及反编译可运行Jar包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • mybatis如何对大量数据的游标查询

    mybatis如何对大量数据的游标查询

    这篇文章主要介绍了mybatis如何对大量数据的游标查询问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论