La clase BigInteger en Java
BigInteger y BigDecimal son clases envoltura de los tipos primitivos int y double, sin embargo tienen ventajas sobre los tipos primitivos. Cuando necesites usar números grandes en Java la mejor opción es usar estas clases, ya que su limite de almacenamiento es el límite de memoria que tenga la máquina virtual de Java.
Además, estas clases proporcionan algunos métodos bastante interesantes, como las operaciones básicas o saber si el número es primo o no. Como siempre vamos con algunos ejemplos de apoyo:
Operaciones básicas con la clase BigInteger
En el siguiente ejemplo se hace uso de los métodos add, substract, multiply y divide para realizar las operaciones básicas de suma, resta, multiplicación y división:
import java.math.BigInteger;
public class PruebaOperacionesBasicas {
public static void main(String args[]){
BigInteger entero1 = BigInteger.valueOf(45);
BigInteger entero2 = BigInteger.valueOf(15);
//sumar con metodo add()
String texto = "La suma entre "+entero1+
" y "+entero2+" es "+entero1.add(entero2);
//restar con metodo substract()
texto += "\nLa resta entre "+entero1+
" y "+entero2+" es "+entero1.subtract(entero2);
//multiplicar con metodo multiply()
texto += "\nEl producto de "+entero1+
" y "+entero2+" es "+entero1.multiply(entero2);
//dividir con metodo divide()
texto += "\nLa división de "+entero1+
" y "+entero2+" entre "+entero1.divide(entero2);
System.out.println(texto);
}
}
Números primos en Java
Este es un típico ejercicio que nos plantean en la universidad; se trata de hacer un listado de los primeros X números primos. En este caso BigInteger nos proporciona dos métodos muy interesantes: isProbablePrime y nextProbablePrime. El primero de ellos devuelve true si el número es probablemente primo (recordemos que es complejo saber si un número es o no primo cuando es demasiado grande); el segundo devuelve el próximo posible número primo a partir del valor que contenga el objeto.
La siguiente aplicación usa el método nextProbablePrime para listar los primeros 2000 números primos:
import java.math.BigInteger;
public class PruebaNumerosPrimos {
public static void main(String args[]){
//iniciar el entero en cero
BigInteger entero = BigInteger.ZERO;
StringBuffer texto = new StringBuffer();
for(int i = 0; i<2000; i++){
entero = entero.nextProbablePrime();
texto.append(entero+"\n");
entero.add(BigInteger.ONE);
}
System.out.println(texto);
}
}
Otros métodos interesantes
La clase BigInteger proporciona además otros métodos que nos ahorrarán bastante tiempo y líneas de código:
- pow, nos permite elevar un número a la potencia que deseemos.
- comparteTo, nos permite comparar si un BigInteger es mayor, igual o menor que otro.
- min y max, nos permiten saber cuál de los dos BigInteger es menor o mayor.
Como mencioné al principio, también es posible usar la clase BigDecimal que funciona de manera similar pero con números de coma flotante.
Descargar código fuente de ejemplos
11 Comentarios | deja el tuyo



hola que tal muy interesante tu explicación, un pregunta no existe una funcion tipo clock de c, c++; pero para java
Gracias, ya pinche el banner
Existe la clase Date que tiene métodos similares.
Sinceramente esa clase desde que la conosco(principios de éste año) me ha hecho la vida mucho más colorida en java
vemos
hola queria saber como se lee de un archivo de texto a una variable BigInteger
Umm, primero tendrías que leer el archivo en sí. Te dejo algunos ejemplos:
http://casidiablo.net/ejercicio-java-file/
http://casidiablo.net/uso-del-objectoutputstream-java/
http://casidiablo.net/objectinputstream-java/
http://casidiablo.net/randomaccessfile-java/
http://casidiablo.net/java-random-access-file-seek/
http://casidiablo.net/leer-randomaccessfile-java/
http://casidiablo.net/codigo-ejemplo-completo-de-archivos-aleatorios-en-java/
Un saludo!
import java.io.*;
import java.math.BigInteger;
public class nose{
public static void main(String args[]) throws IOException{
byte tales[] = new byte[new File("ar").length()];
FileInputStream flin = new FileInputStream(“ar”);
flin.read(tales);
BigInteger epa = new BigInteger(new String(tales,0,tales.length-1));
System.out.println(epa);
}
}
Eso si lees el archivo, donde ar solo contendra el numero y ningun otro caracter…
puedes tambien usar un Buffer para hacerlo por lineas…o pues infinidad de formas ahi si imaginacion
Esta información es de gran ayuda. Gracias.
Hola
Excelente clase¡¡
Saludos
HOLA QUE TAL INTERESANTE, PERO EL EJEMPLO NO SERIA EFICIENTE PAR NUMEROS MUY GRANDES COMO NUMEROS CON MAS DE 100 DIGITOS , YO SUGERERIA QUE PUSIERAN UN EJEMPLO ASI ,SE LES AGRESERIA MUCHO ,….. GRACIAS