Java 处理超大数类型之BigInteger案例详解
作者:温柔的谢世杰 发布时间:2021-06-20 15:36:38
一、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));
}
}
来源:https://blog.csdn.net/qq_33945246/article/details/105202522


猜你喜欢
- 前言在实际开发当中,Spring中bean的属性直接赋值用的不是太多,整理这方面的资料,做一个小结,以备后续更深入的学习。通过配置文件的方式
- 本文实例为大家分享了java实现斗地主发牌的具体代码,供大家参考,具体内容如下参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,
- 实例:用户输入一个日期,要求输出这个日期是星期几和在这一年中的第几天://声明一个DateTime类型的变量用于存放用户输入的日期DateT
- 本文实例讲述了Android基本游戏循环。分享给大家供大家参考。具体如下:// desired fpsprivate final stati
- Contact联系人对Mms来说是十分重要的,因为每一个对话的收信人都是一个联系人,新建信息时可以输入联系人的任何信息,比如号码或名字,Mm
- 在学习 Spring Mvc 过程中,有必要来先了解几个关键参数:@Controller:在类上注解,则此类将编程一个控制器,在项目启动 S
- 目录1. 结论先出JSR 380Valid VS Validated 不同点?Validator2. @Valid和@Validated 注
- 前言 红包文化源远流长。从古时的红色纸包,到手
- 通过yml配置文件为静态成员变量赋值我们对springboot为普通成员变量的方式很熟悉,所以经常定式思维的认为静态属性的赋值和普通属性一样
- 一、搭建 mvc 环境新建一个 module 模块,创建 maven 工程,步骤跟以前一样,各种配置文件内容也可以拷贝修改一下即可。二、创建
- 使用ByteArrayOutputStream下载文件//文件名称String filepath = ServletActionContex
- 从 <<Windows Forms 2.0 Programming, 2nd Edition>> &nbs
- 现象: 1. 表面现象: 方法中输出的日志, 日志文件中找不到, 也没有任何报错(即@Async标注的方法没有执行, 也没有报错)2. 分析
- 泛型方法是使用类型参数声明的方法,如下所示:static void Swap<T>(ref T lhs, ref T rhs){
- 发现问题需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度。想的很
- 导语相信大家无论是做前端还是做后端的,都被接口接口文档所折磨过,前端抱怨接口文档和后端给的不一致,后端抱怨写接口文档很麻烦,所以Swagge
- 本文实例讲述了C#线程同步的三类情景,分享给大家供大家参考。具体分析如下:C# 已经提供了我们几种非常好用的类库如 BackgroundWo
- 本文实例讲述了Android使用onCreateOptionsMenu()创建菜单Menu的方法。分享给大家供大家参考,具体如下:Andro
- 首先倒入一个依赖: compile 'com.youth.banner:banner:1.4.9'添加的权限:<use
- 零、关于HibernateHibernate是冬眠的意思,它是指动物的冬眠,但是本文讨论的Hibernate却与冬眠毫无关系,而是接下来要讨