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

(0)

相关推荐

  • Java大数字运算之BigInteger 原创

    在 Java 中,有许多数字处理的类,比如 Integer 类.但是Integer 类有一定的局限性,下面我们就来看看比 Integer 类更厉害的一个,BigInteger类. BigInteger类型的数字范围较 Integer 类型的数字范围要大得多.我们都知道 Integer 是 Int 的包装类,int 的最大值为 231-1,如果要计算更大的数字,使用Integer 数据类型就无法实现了,所以 Java 中提供了BigInteger 类来处理更大的数字. BigInteger 支持任

  • 聊聊Java BigInteger里面的mod和remainder的区别

    目录 BigInteger里的mod和remainder区别 mod是模运算,remainder是求余运算 BigInteger类的一些使用心得 下面总结一下以后方便找 1.给大数赋值 2.把int型转化为string型 3.把两个字符串拼接 BigInteger里的mod和remainder区别 下面直接上图吧,稍后解释关于mod和remainder以及负数求余求模的区别. mod是模运算,remainder是求余运算 如果被除数是正整数,mod和remainder的结果没区别.mod运算除数

  • Java中两个大数之间的相关运算及BigInteger代码示例

    Java中两个大数之间的相关运算及BigInteger两段实例代码,具体如下. 大数相减 import java.util.Scanner; /* 进行大数相减,只能对两个正数进行相减 */ public class BigNumber { public static void main(String[] args) { Scanner scan=new Scanner(System.in); String a,b; while (scan.hasNext()) { BigNumber big=

  • Java BigInteger类,BigDecimal类,Date类,DateFormat类及Calendar类用法示例

    本文实例讲述了Java BigInteger类,BigDecimal类,Date类,DateFormat类及Calendar类用法.分享给大家供大家参考,具体如下: BigInteger类 发 package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进行运算 * * 构造方法: * BigInteger(String val) */ public class BigIntegerDe

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

    一.BigInteger介绍 如果在操作的时候一个整型数据已经超过了整数的最大类型长度 long 的话,则此数据就无法装入,所以,此时要使用 BigInteger 类进行操作.这些大数都会以字符串的形式传入. BigInteger 相比 Integer 的确可以用 big 来形容.它是用于科学计算,Integer 只能容纳一个 int,所以,最大值也就是 2 的 31 次访减去 1,十进制为 2147483647.但是,如果需要计算更大的数,31 位显然是不够用的,那么,此时 BigIntege

  • Java Spring @Lazy延迟注入源码案例详解

    前言 有时候我们会在属性注入的时候添加@Lazy注解实现延迟注入,今天咱们通过阅读源码来分析下原因 一.一个简单的小例子 代码如下: @Service public class NormalService1 { @Autowired @Lazy private MyService myService; public void doSomething() { myService.getName(); } } 作用是为了进行延迟加载,在NormalService1进行属性注入的时候,如果MyServ

  • Java Stopwatch类,性能与时间计时器案例详解

    在研究性能的时候,完全可以使用Stopwatch计时器计算一项技术的效率.但是有时想知道某想技术的性能的时候,又常常想不起可以运用Stopwatch这个东西,太可悲了. 属性: Elapsed 获取当前实例测量得出的总运行时间. ElapsedMilliseconds  获取当前实例测量得出的总运行时间(以毫秒为单位). ElapsedTicks  获取当前实例测量得出的总运行时间(用计时器计时周期表示). IsRunning   获取一个指示 Stopwatch 计时器是否在运行的值. 方法

  • Java CharacterEncodingFilter过滤器的理解和配置案例详解

    在web项目中我们经常会遇到当前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候就会出现表单提交的数据或者上传/下载中文名称文件出现乱码的问题,这些问题的原因就是因为我们项目中使用的编码不一样.为了解决这个问题我们就可以使用CharacterEncodingFilter类,他是Spring框架对字符编码的处理,基于函数回调,对所有请求起作用,只在容器初始化时调用一次,依赖于servlet容器.具体配置如下: <filter> <filter-name>character

  • Java Apollo环境搭建以及集成SpringBoot案例详解

    环境搭建 下载Quick Start安装包 从Github下载:checkout或下载apollo-build-scripts项目 手动打包Quick Start安装包 修改apollo-configservice, apollo-adminservice和apollo-portal的pom.xml,注释掉spring-boot-maven-plugin和maven-assembly-plugin 在根目录下执行mvn clean package -pl apollo-assembly -am

  • Java 高并发的三种实现案例详解

    提到锁,大家肯定想到的是sychronized关键字.是用它可以解决一切并发问题,但是,对于系统吞吐量要求更高的话,我们这提供几个小技巧.帮助大家减小锁颗粒度,提高并发能力. 初级技巧-乐观锁 乐观锁使用的场景是,读不会冲突,写会冲突.同时读的频率远大于写.  悲观锁的实现: 悲观的认为所有代码执行都会有并发问题,所以将所有代码块都用sychronized锁住 乐观锁的实现: 乐观的认为在读的时候不会产生冲突为题,在写时添加锁.所以解决的应用场景是读远大于写时的场景. 中级技巧-String.i

  • Java之Error与Exception的区别案例详解

    首先,Error类和Exception类都是继承Throwable类 Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正.一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等.对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止. Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复.遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止

  • Java toString方法重写工具之ToStringBuilder案例详解

    apache的commons-lang3的工具包里有一个ToStringBuilder类,这样在打日志的时候可以方便的打印出类实例中的各属性的值. 具体用法如下: import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; public class Message { private String from; private Stri

  • Java 使用maven实现Jsoup简单爬虫案例详解

    一.Jsoup的简介         jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据 二.我们可以利用Jsoup做什么         2.1从URL,文件或字符串中刮取并解析HTML查找和提取数据,         2.2使用DOM遍历或CSS选择器操纵HTML元素,属性和文本         2.3从而使我们输出我们想要的整洁文本 三.利用Jsoup爬

  • Java BigDecimal案例详解

    引言 float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合.但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦. 先看下面代码 public static void main(String[] args) { System.out.println(0.2 + 0.1); System.out.printl

随机推荐