La clase BigInteger se utiliza para operaciones matemáticas que implican cálculos de enteros muy grandes que están fuera del límite de todos los tipos de datos primitivos disponibles.

Por ejemplo, el factorial de 100 contiene 158 dígitos, por lo que no podemos almacenarlo en ningún tipo de datos primitivo disponible. Podemos almacenar enteros tan grandes como queramos en él. No hay un límite teórico en el límite superior del rango porque la memoria se asigna dinámicamente, pero prácticamente como la memoria es limitada, puede almacenar un número que tenga un número de bits Integer.MAX_VALUE que debería ser suficiente para almacenar la mayoría de los valores grandes.

A continuación se muestra un programa Java de ejemplo que usa BigInteger para calcular Factorial.

import java.math.BigInteger;

import java.util.Scanner;

 

public class Example

{

    

    static BigInteger factorial(int N)

    {

        

        BigInteger f = new BigInteger("1");

 

        

        for (int i = 2; i <= N; i++)

            f = f.multiply(BigInteger.valueOf(i));

 

        return f;

    }

 

    

    public static void main(String args[]) throws Exception

    {

        int N = 20;

        System.out.println(factorial(N));

    }

}

Producción:

2432902008176640000

Si tenemos que escribir el programa anterior en C ++, eso sería demasiado grande y complejo, podemos mirar Factorial de gran número.
De esta manera, la clase BigInteger es muy útil de usar debido a su gran biblioteca de métodos y también se usa mucho en la programación competitiva.

A continuación, se proporciona una lista de declaraciones simples en aritmética primitiva y su declaración análoga en términos de objetos BigInteger.

Declaración

int a, b;                
BigInteger A, B; 

Inicialización:

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

Y para los enteros disponibles como cadena, puede inicializarlos como:

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

Algunas constantes también se definen en la clase BigInteger para facilitar la inicialización:

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

Operaciones matemáticas:

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

Otras funciones similares son restar (), multiplicar (), dividir (), resto ()
Pero todas estas funciones toman BigInteger como su argumento, por lo que si queremos estas operaciones con enteros o cadenas, conviértalas a BigInteger antes de pasarlas a funciones como se muestra a continuación:

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

Extracción de valor de 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();  


Comparación:

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

En realidad compareTo devuelve -1 (menor que), 0 (Igual), 1 (mayor que) según los valores.

Para la igualdad también podemos usar:

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

Métodos de la clase BigInteger:

  1. BigInteger abs (): Este método devuelve un BigInteger cuyo valor es el valor absoluto de este BigInteger.
  2. BigInteger agregar (BigInteger val): Este método devuelve un BigInteger cuyo valor es (this + val).
  3. BigInteger y (BigInteger val): Este método devuelve un BigInteger cuyo valor es (this & val).
  4. BigInteger y No (BigInteger val): Este método devuelve un BigInteger cuyo valor es (this & ~ val).
  5. int bitCount (): Este método devuelve el número de bits en la representación en complemento a dos de este BigInteger que difieren de su bit de signo.
  6. int bitLength (): Este método devuelve el número de bits en la representación mínima en complemento a dos de este BigInteger, excluyendo un bit de signo.
  7. byte byteValueExact (): Este método convierte este BigInteger en un byte, comprobando la pérdida de información.
  8. BigInteger clearBit (int n): Este método devuelve un BigInteger cuyo valor es equivalente a este BigInteger con el bit designado borrado.
  9. int compareTo (BigInteger val): Este método compara este BigInteger con el BigInteger especificado.
  10. División de BigInteger (BigInteger val): Este método devuelve un BigInteger cuyo valor es (this / val).
  11. BigInteger[] divideAndRemainder (BigInteger val): Este método devuelve una matriz de dos BigIntegers que contienen (this / val) seguido de (this% val).
  12. double doubleValue (): Este método convierte este BigInteger en un doble.
  13. booleano es igual a (Objeto x): Este método compara este BigInteger con el objeto especificado para la igualdad.
  14. BigInteger flipBit (int n): Este método devuelve un BigInteger cuyo valor es equivalente a este BigInteger con el bit designado invertido.
  15. float floatValue (): Este método convierte este BigInteger en un flotante.
  16. BigInteger gcd (BigInteger val): Este método devuelve un BigInteger cuyo valor es el máximo común divisor de abs (this) y abs (val).
  17. int getLowestSetBit (): Este método devuelve el índice del bit más a la derecha (orden más bajo) en este BigInteger (el número de bits cero a la derecha del bit más a la derecha).
  18. int hashCode (): Este método devuelve el código hash para este BigInteger.
  19. int intValue (): Este método convierte este BigInteger en un int.
  20. int intValueExact (): Este método convierte este BigInteger en un int, comprobando la pérdida de información.
  21. boolean isProbablePrime (certeza int): Este método devuelve verdadero si este BigInteger es probablemente primo, falso si definitivamente es compuesto.
  22. long longValue (): Este método convierte este BigInteger en un long.
  23. long longValueExact (): Este método convierte este BigInteger en un largo, buscando información perdida.
  24. BigInteger max (BigInteger val): Este método devuelve el máximo de este BigInteger y val.
  25. BigInteger min (BigInteger val): Este método devuelve el mínimo de este BigInteger y val.
  26. Mod BigInteger (BigInteger m): Este método devuelve un BigInteger cuyo valor es (este mod m).
  27. BigInteger modInverse (BigInteger m): Este método devuelve un BigInteger cuyo valor es (this-1 mod m).
  28. BigInteger modPow (exponente BigInteger, BigInteger m): Este método devuelve un BigInteger cuyo valor es (thisexponent mod m).
  29. BigInteger multiplicar (BigInteger val): Este método devuelve un BigInteger cuyo valor es (este * val).
  30. BigInteger negar (): Este método devuelve un BigInteger cuyo valor es (-este).
  31. BigInteger nextProbablePrime (): Este método devuelve el primer número entero mayor que este BigInteger que probablemente sea primo.
  32. BigInteger no (): Este método devuelve un BigInteger cuyo valor es (~ this).
  33. BigInteger o (BigInteger val): Este método devuelve un BigInteger cuyo valor es (este | val).
  34. BigInteger pow (exponente int): Este método devuelve un BigInteger cuyo valor es (thisexponent).
  35. static BigInteger probablePrime (int bitLength, Random rnd): Este método devuelve un BigInteger positivo que probablemente sea primo, con el bitLength especificado.
  36. Resto de BigInteger (BigInteger val): Este método devuelve un BigInteger cuyo valor es (este% val).
  37. BigInteger setBit (int n): Este método devuelve un BigInteger cuyo valor es equivalente a este BigInteger con el bit designado establecido.
  38. BigInteger shiftLeft (int n): Este método devuelve un BigInteger cuyo valor es (este << n).
  39. BigInteger shiftRight (int n): Este método devuelve un BigInteger cuyo valor es (este >> n).
  40. short shortValueExact (): Este método convierte este BigInteger en un corto, buscando información perdida.
  41. int signum (): Este método devuelve la función signum de este BigInteger.
  42. BigInteger sqrt (): Este método devuelve la raíz cuadrada entera de este BigInteger.
  43. BigInteger[] sqrtAndRemainder (): Este método devuelve una matriz de dos BigIntegers que contienen la raíz cuadrada entera s de this y su resto this – s * s, respectivamente.
  44. Restar BigInteger (BigInteger val): Este método devuelve un BigInteger cuyo valor es (this – val).
  45. testBit booleano (int n): Este método devuelve verdadero si y solo si el bit designado está establecido.
  46. byte[] toByteArray (): Este método devuelve una matriz de bytes que contiene la representación en complemento a dos de este BigInteger.
  47. Cadena toString (): Este método devuelve la representación de cadena decimal de este BigInteger.
  48. Cadena toString (raíz int): Este método devuelve la representación de cadena de este BigInteger en la base dada.
  49. static BigInteger valueOf (long val): Este método devuelve un BigInteger cuyo valor es igual al del long especificado.
  50. BigInteger xor (BigInteger val): Este método devuelve un BigInteger cuyo valor es (este ^ val).

Artículos relacionados:
Grandes números de Fibonacci en Java
La clase BigInteger también proporciona métodos rápidos para números primos.

Problemas de SPOJ:
Entonces, después del conocimiento anterior de la función de la clase BigInteger, podemos resolver muchos problemas complejos fácilmente, pero recuerde que la clase BigInteger usa internamente una matriz de enteros para el procesamiento, la operación en el objeto de BigIntegers no es tan rápida como en las primitivas que es agregar función en BigIntgers no toma un tiempo constante, toma un tiempo proporcional a la longitud de BigInteger, por lo que la complejidad del programa cambiará en consecuencia. A continuación se muestran los problemas de SPOJ para comprender BigIntegers:

http://www.spoj.com/problems/JULKA/
http://www.spoj.com/problems/MCONVERT/en/
http://www.spoj.com/problems/MUL2COM/en/
http://www.spoj.com/problems/REC/
http://www.spoj.com/problems/SETNJA/en/
http://www.spoj.com/problems/TREE/
http://www.spoj.com/problems/WORMS/

Para obtener más funciones y detalles, consulte http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *