当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java BigInteger用法及代码示例


BigInteger 类用于数学运算,该运算涉及超出所有可用原始数据类型限制的非常大的整数计算。

这样一来,BigInteger类由于其庞大的方法库,使用起来非常方便,并且在竞技编程中也被大量使用。
下面给出了原始算术中的简单语句及其以 BigInteger 对象表示的类似语句的列表。

例子:

int a, b;                
BigInteger A, B; 

初始化如下:

a = 54;
b = 23;
A  = BigInteger.valueOf(54);
B  = BigInteger.valueOf(37); 

对于可用作字符串的整数,您可以按如下方式初始化它们:

A  = new BigInteger(“54”);
B  = new BigInteger(“123456789123456789”); 

为了便于初始化,BigInteger 类中还定义了一些常量,如下所示:

A = BigInteger.ONE;
// Other than this, available constant are BigInteger.ZERO 
// and BigInteger.TEN 

数学运算如下:

int c = a + b;
BigInteger C = A.add(B); 

其他类似的函数有subtract()、multiply()、divide()、remainder(),但所有这些函数都以BigInteger作为参数,因此如果我们想要对整数或字符串进行此操作,请在传递它们之前将它们转换为BigInteger函数如下图所示:

String str = “123456789”;
BigInteger C = A.add(new BigInteger(str));
int val  = 123456789;
BigInteger C = A.add(BigInteger.valueOf(val)); 

从BigInteger中提取值如下:

int x   =  A.intValue();   // value should be in limit of int x
long y   = A.longValue();  // value should be in limit of long y
String z = A.toString();  

比较

if (a < b) {}         // For primitive int
if (A.compareTo(B) < 0)  {} // For BigInteger 

实际上compareTo根据值返回-1(小于)、0(等于)、1(大于)。为了平等,我们还可以使用:

if (A.equals(B)) {}  // A is equal to B 

Methods of BigInteger Class

方法 执行的操作
add(BigInteger val) 返回值为 (this + val) 的BigInteger。
BigInteger abs() 返回一个 BigInteger,其值是此 BigInteger 的绝对值。
BigInteger and() 返回值为 (this & val) 的BigInteger。
BigInteger andNot()) 返回一个 BigInteger,其值为 (this & ~val)。
BigInteger bitCount() 返回此 BigInteger 的二进制补码表示中与其符号位不同的位数。
BigInteger bitLength() 返回此 BigInteger 的最小补码表示形式的位数,不包括符号位。
BigInteger byteValueExact() 将此 BigInteger 转换为字节,检查丢失的信息。
BigInteger clearBit() 返回BigInteger,其值等于指定位被清除的BigInteger。
BigInteger compareTo() 将此 BigInteger 与指定的 BigInteger 进行比较。
divide(BigInteger val) 返回值为 (this /val) 的BigInteger。
BigInteger divideAndRemainder() 返回两个 BigIntegers 的数组,其中包含 (this /val) 后跟 (this % val)。
BigInteger doubleValue() 将此 BigInteger 转换为双精度值。
BigInteger equals() 将此 BigInteger 与指定对象进行比较是否相等。
BigInteger flipBit() 返回一个BigInteger,其值等于此BigInteger(指定位翻转)。
BigInteger floatValue() 将此 BigInteger 转换为浮点数。
gcd(BigInteger val) 返回一个BigInteger,其值为abs(this) 和abs(val) 的最大公约数。
BigInteger getLowestSetBit() 返回此 BigInteger 中最右边(最低位)一位的索引(最右边一位右侧的零位的数量)。
hashCode() 返回此 BigInteger 的哈希码。
BigInteger intValue() 将此 BigInteger 转换为 int。
BigInteger intValueExact() 将此 BigInteger 转换为 int,检查丢失的信息。
isProbablePrime(int certainty) 如果 BigInteger 可能是素数,则返回 true;如果肯定是合数,则返回 false。
BigInteger longValue() 将此BigInteger 转换为长整型。
BigInteger longValueExact() 将此 BigInteger 转换为长整型,检查丢失的信息。
BigInteger max()、min() 返回此 BigInteger 和 val 的最大值。
BigInteger max()、min()) 返回BigInteger 和 val 中的最小值。
BigInteger mod() 返回一个 BigInteger,其值为 (this mod m)。
Java.math.BigInteger.modInverse() 返回一个 BigInteger,其值为 (this-1 mod m)。
BigInteger modPow() 返回 BigInteger,其值为 (thisexponent mod m)。
multiply(BigInteger val) 返回一个 BigInteger,其值为 (this * val)。
BigInteger negate() 返回值为 (-this) 的BigInteger。
nextProbablePrime() 返回大于 BigInteger 的第一个整数,该整数可能是素数。
BigInteger not() 返回值为 (~this) 的BigInteger。
BigInteger or() 返回值为 (this | val) 的 BigInteger。
BigInteger pow() 返回值为 (thisexponent) 的 BigInteger。
Java.math.BigInteger.probablePrime() 返回一个正的BigInteger,它可能是素数,具有指定的位长度。
BigInteger remainder() 返回一个 BigInteger,其值为 (this % val)。
BigInteger setBit() 返回BigInteger,其值等于具有指定位设置的BigInteger。
BigInteger shiftLeft() 返回一个 BigInteger,其值为 (this << n)。
BigInteger shiftRight() 返回一个 BigInteger,其值为 (this >> n)。
BigInteger shortValueExact() 将此 BigInteger 转换为短值,检查丢失的信息。
BigInteger signum() 返回此 BigInteger 的符号函数。
BigInteger sqrt() 返回此 BigInteger 的整数平方根。
sqrtAndRemainder() 返回两个 BigIntegers 的数组,分别包含 this 的整数平方根 s 及其余数 this - s*s。
subtract(BigInteger val) 返回值为 (this - val) 的 BigInteger。
BigInteger testBit() 当且仅当设置了指定位时返回 true。
BigInteger toByteArray() 返回一个字节数组,其中包含此 BigInteger 的补码表示形式。
BigInteger toString() 返回此 BigInteger 的十进制字符串表示形式。
BigInteger toString() 返回给定基数中此 BigInteger 的字符串表示形式。
BigInteger valueOf() 返回一个BigInteger,其值等于指定的 long 值。
BigInteger xor() 返回一个 BigInteger,其值为 (this^val)。

示例:

100 的阶乘包含 158 位数字,因此我们无法将其存储在任何可用的原始数据类型中。我们可以在其中存储任意大的整数。范围的上限没有理论上的限制,因为内存是动态分配的,但实际上,由于内存有限,您可以存储一个具有 Integer.MAX_VALUE 位的数字,这应该足以存储几乎所有大值。

例子:

Java


// Java program to find large factorials using BigInteger
import java.math.BigInteger;
import java.util.Scanner;
public class Example
{
    // Returns Factorial of N
    static BigInteger factorial(int N)
    {
        // Initialize result
        BigInteger f = new BigInteger("1"); // Or BigInteger.ONE
        // Multiply f with 2, 3, ...N
        for (int i = 2; i <= N; i++)
            f = f.multiply(BigInteger.valueOf(i));
        return f;
    }
    // Driver method
    public static void main(String args[]) throws Exception
    {
        int N = 20;
        System.out.println(factorial(N));
    }
}

输出:

2432902008176640000

Tip: If we have to write above program in C++, that would be too large and complex, we can look at Factorial of Large Number

所以有了以上BigInteger类的函数知识之后,我们就可以轻松解决很多复杂的问题了,但是要记住,由于BigInteger类内部使用的是整数数组来进行处理,所以对BigIntegers对象的操作并不像BigIntegers类那样。与 BigIntgers 上的 add 函数的原语一样快,并不需要恒定的时间,它所花费的时间与 BigInteger 的长度成正比,因此程序的复杂性将相应改变。

必读:



相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 BigInteger Class in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。