• Tags ,
  •         
  • www.breakyizhan.com
  •    

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

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

    下面是一个使用BigInteger的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

    通过这种方式,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(BigIntger.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

     
    转载请保留页面地址:https://www.breakyizhan.com/java/6601.html