Java-BigInteger类

概述

在Java中,由CPU原生提供的整型最大范围是64位1ong型整数。使用1ong型整数可以直接通过CPU指令进行计算,速度非常快。如果我们使用的整数范围超过了long型怎么办?这个时候,就只能用数据结构来模拟一个大整数。BigInteger 内部用一个 int[]数组来模拟一个非常大的整数:java.math.BigInteger 就是用来表示任意大小的整数。

构造器

BigInteger(String val)

构造一个 BigInteger,其值为给定的字符串 val。字符串应表示一个合法的整数值(包括正负号)。

    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("123");
        System.out.println(bigInteger); //123
    }

BigInteger(String val, int radix)

构造一个 BigInteger,其值为给定的字符串 val,并按照指定的进制 radix 解析字符串。进制范围是 2 到 36。

    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("1011", 2);  // 二进制字符串 "1011" 转换为十进制 BigInteger
        System.out.println(bigInteger); //11
    }

BigInteger(int numBits)

构造一个 BigInteger,其值为一个大于或等于 0 的随机整数,该整数具有 numBits 位的二进制表示。

    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger(128, new SecureRandom());
        System.out.println(bigInteger); //12560529483309409158830312075381906932
    }

BigInteger(int signum, byte[] magnitude)

构造一个 BigInteger,其值由给定的字节数组 magnitude 表示,并使用 signum 指定符号。

signum 为 1 表示正数,-1 表示负数,0 表示零。

magnitude 是表示数值的字节数组(不包括符号位)。

    public static void main(String[] args) {
        byte[] magnitude = new byte[] {1,2,3};
        BigInteger bigInteger = new BigInteger(1, magnitude);  // 正数
        System.out.println(bigInteger); //66051
    }

BigInteger(byte[] bytes)

构造一个 BigInteger,其值由给定的字节数组 bytes 表示(字节数组的第一个字节表示最高有效位)。

    public static void main(String[] args) {
        byte[] bytes = new byte[] {1,2,3};
        BigInteger bigInteger = new BigInteger(bytes);
        System.out.println(bigInteger); //66051
    }

常用方法

BigInteger abs()

返回此 BigInteger 的绝对值的 BigInteger

        BigInteger bigInteger = new BigInteger("-123");
        BigInteger abs = bigInteger.abs();
        System.out.println(abs); //123

add(BigInteger val)

返回其值为 (this + val) 的 BigInteger

    public static void main(String[] args) {
        BigInteger bigInteger1 = new BigInteger("-123");
        BigInteger bigInteger2 = new BigInteger("129");
        BigInteger bigInteger3 = bigInteger1.add(bigInteger2);
        System.out.println(bigInteger3); //6
    }

subtract(BigInteger val)

返回其值为 (this - val) 的 BigInteger

    public static void main(String[] args) {
        BigInteger bigInteger1 = new BigInteger("-123");
        BigInteger bigInteger2 = new BigInteger("129");
        BigInteger bigInteger3 = bigInteger2.subtract(bigInteger1);
        System.out.println(bigInteger3); //252
    }

 multiply(BigInteger val)    

返回其值为 (this * val) 的 BigInteger

    public static void main(String[] args) {
        BigInteger bigInteger1 = new BigInteger("-123");
        BigInteger bigInteger2 = new BigInteger("129");
        BigInteger bigInteger3 = bigInteger2.multiply(bigInteger1);
        System.out.println(bigInteger3); //-15867
    }

divide(BigInteger val)

返回其值为 (this / val) 的BigInteger,整数相除只保留整数部分

    public static void main(String[] args) {
        BigInteger bigInteger1 = new BigInteger("-123");
        BigInteger bigInteger2 = new BigInteger("1290");
        BigInteger bigInteger3 = bigInteger2.divide(bigInteger1);
        System.out.println(bigInteger3); //-10
    }

remainder(BigInteger val)

返回其值为 (this % val) 的 BigInteger

    public static void main(String[] args) {
        BigInteger bigInteger1 = new BigInteger("123");
        BigInteger bigInteger2 = new BigInteger("1290");
        BigInteger bigInteger3 = bigInteger2.remainder(bigInteger1);
        System.out.println(bigInteger3); //60
    }

divideAndRemainder(BigInteger val)

返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组

    public static void main(String[] args) {
        BigInteger bigInteger1 = new BigInteger("123");
        BigInteger bigInteger2 = new BigInteger("1290");
        BigInteger[] bigIntegers = bigInteger2.divideAndRemainder(bigInteger1);
        for(int i = 0;i<bigIntegers.length;i++){
            System.out.print(bigIntegers[i]); //1060
        }
//        1290/123 = 10  1290%123= 60
    }

pow(int exponent)

返回其值为this的 的exponent次方的 BigInteger

    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("123");
        BigInteger pow = bigInteger.pow(2);
        System.out.println(pow); //123的2次方 = 15129
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值