Números Grandes en Java
Manejo básico de BigInteger.
En el API de Java, paquete java.math se encuentra la
clase BigInteger.
import
java.math.BigInteger;
La clase BigInteger nos permite procesar números con N
cantidad de dígitos, donde N es un número considerablemente alto.
*BigInteger solo permite valores del
tipo entero.
**Para números decimales con una
cantidad grande de dígitos se utiliza BigDecimal.*Se explicara en otra entrada
al blog.
Importancia del
Biginteger.
La importancia de BigInteger radica en la cantidad de
dígitos en un número, teniendo en cuenta que:
Nombre Rango
Aproximado
byte -128 a 127
short -32768 a 32767
int -2147483648 a 2147483647
long -9223372036854775808 a
9223372036854775807
Donde la mayor cantidad de dígitos que se puede tener en
números enteros es en el uso de un long con la cantidad de 19 dígitos.
Uso del Biginteger.
Para hacer uso de un BigInteger se crea de las siguientes
maneras:
·
Forma 1:
Uso de las variables estáticas en BigInteger, la clase tiene
3 variables estáticas que nos facilitan la inicialización del objeto.
Crea el BigInteger con valor de inicio:
1 [ uno ] - BigInteger.ONE
10 [ diez ] - BigInteger.TEN;
0 [ cero ] - BigInteger.ZERO;
BigInteger forma1 = BigInteger.ZERO;
·
Forma 2:
En la creación del objeto BigInteger se manda como parámetro
el número como cadena de caracteres o datos de tipo numérico convertido a String, o simplemente leer desde
teclado usando Scanner.
Parámetro pasado como cadena:
String numero = “123456789101112”;
BigInteger forma2 = new
BigInteger(numero);
Parámetro pasado como long:
long num = 9223372036854775807L;
BigInteger forma2 = new
BigInteger(num+"");
Parámetro leído desde teclado usando Scanner:
Scanner s = new Scanner (System.in);
BigInteger num =
s.nextBigInteger();
Operaciones básicas con BigInter:
Suma – add() –
Se usa el método .add() para sumar 2 números del tipo BigInteger.
Se usa el método .add() para sumar 2 números del tipo BigInteger.
BigInteger uno
= new BigInteger("9223372036854775807");
BigInteger dos
= new BigInteger("9223372036854775807");
BigInteger
resultado = uno.add(dos);
System.out.println("Resultado de suma de 2 objetos BigInteger :
"+resultado);
Resta – subtract() –
Se usa el método .subtract() para restar 2 números del tipo BigInteger.
BigInteger uno
= new BigInteger("9223372036854775807");
BigInteger dos
= new BigInteger("9223372036854775807");
BigInteger
resultado = uno.subtract(dos);
System.out.println("Resultado de resta de 2 objetos BigInteger :
" + resultado);
Multiplicación – multiply
() –
Se usa el método .multiply () para multiplicar 2 números del tipo BigInteger.
Se usa el método .multiply () para multiplicar 2 números del tipo BigInteger.
BigInteger uno
= new BigInteger("9223372036854775807");
BigInteger dos
= new BigInteger("9223372036854775807");
BigInteger
resultado = uno.multiply(dos);
System.out.println("Resultado de multiplicación de 2 objetos
BigInteger : " + resultado);
División – divide () –
Se usa el método .divide () para dividir 2 números del tipo BigInteger.
Se usa el método .divide () para dividir 2 números del tipo BigInteger.
BigInteger uno
= new BigInteger("9223372036854775807");
BigInteger dos
= new BigInteger("9223372036854775807");
BigInteger
resultado = uno.divide(dos);
System.out.println("Resultado de división de 2 objetos BigInteger :
" + resultado);
Residuo Modulo – mod ()
–
Se usa el método .mod() para obtener el residuo de 2 números del tipo BigInteger.
Se usa el método .mod() para obtener el residuo de 2 números del tipo BigInteger.
BigInteger uno
= new BigInteger("9223372036854775807");
BigInteger dos
= new BigInteger("4");
BigInteger
resultado = uno.mod(dos);
System.out.println("Resultado del residuo de 2 objetos BigInteger : " + resultado);
System.out.println("Resultado del residuo de 2 objetos BigInteger : " + resultado);
Operaciones de
Bits .xor() - and() - or() –
Se usan los métodos .xor() - and() - or() del objeto BigInteger para operaciones de bits.
BigInteger uno
= new BigInteger("9223372036854775807");
BigInteger dos
= new BigInteger("9223372036854775807");
BigInteger
resultado = uno.xor(dos);
System.out.println("Resultado del xor de 2 objetos BigInteger :
" + resultado);
resultado =
uno.or(dos);
System.out.println("Resultado del or de 2 objetos BigInteger :
" + resultado);
resultado =
uno.and(dos);
System.out.println("Resultado del and de 2 objetos BigInteger :
" + resultado);
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { crearBigIntegerMetodo1(); crearBigIntegerMetodo2(); operacionSuma(); operacionResta(); operacionMultiplicacion(); operacionDivision(); operacionResiduo(); operacionesDeBits(); } public static void crearBigIntegerMetodo1() { // Formas de instanciar un BigInteger : // Forma 1: BigInteger num1 = BigInteger.ONE; BigInteger num2 = BigInteger.TEN; BigInteger num3 = BigInteger.ZERO; System.out.println("Valor de num1 : " + num1); System.out.println("Valor de num2 : " + num2); System.out.println("Valor de num3 : " + num3); } public static void crearBigIntegerMetodo2() { // Formas de instanciar un BigInteger : // Forma 2: Scanner s = new Scanner(System.in); String numero = "9223372036854775807000000"; BigInteger porString = new BigInteger(numero); System.out.println("BigInteger creado por cadena String : " + porString); long Long = 9223372036854775807L; BigInteger porLong = new BigInteger(Long + ""); System.out.println("BigInteger creado por long : " + porLong); System.out.println("Ingrese un número BigInteger : "); BigInteger leidoPorTeclado = s.nextBigInteger(); System.out.println("El BigInteger leído por teclado es : " + leidoPorTeclado); } public static void operacionSuma() { // Se usa el método .add() del objeto BigInteger. BigInteger uno = new BigInteger("9223372036854775807"); BigInteger dos = new BigInteger("9223372036854775807"); BigInteger resultado = uno.add(dos); System.out.println("Resultado de suma de 2 objetos BigInteger : " + resultado); } public static void operacionResta() { // Se usa el método .subtract() del objeto BigInteger. BigInteger uno = new BigInteger("9223372036854775807"); BigInteger dos = new BigInteger("9223372036854775807"); BigInteger resultado = uno.subtract(dos); System.out.println("Resultado de resta de 2 objetos BigInteger : " + resultado); } public static void operacionMultiplicacion() { // Se usa el método .multiply() del objeto BigInteger. BigInteger uno = new BigInteger("9223372036854775807"); BigInteger dos = new BigInteger("9223372036854775807"); BigInteger resultado = uno.multiply(dos); System.out.println("Resultado de multiplicación de 2 objetos BigInteger : " + resultado); } public static void operacionDivision() { // Se usa el método .divide() del objeto BigInteger. BigInteger uno = new BigInteger("9223372036854775807"); BigInteger dos = new BigInteger("9223372036854775807"); BigInteger resultado = uno.divide(dos); System.out.println("Resultado de división de 2 objetos BigInteger : " + resultado); } public static void operacionResiduo() { // Se usa el método .divide() del objeto BigInteger. BigInteger uno = new BigInteger("9223372036854775807"); BigInteger dos = new BigInteger("4"); BigInteger resultado = uno.mod(dos); System.out.println("Resultado del residuo de 2 objetos BigInteger : " + resultado); } public static void operacionesDeBits() { // Se usa el método .xor() - and() - or() del objeto BigInteger. BigInteger uno = new BigInteger("9223372036854775807"); BigInteger dos = new BigInteger("9223372036854775807"); BigInteger resultado = uno.xor(dos); System.out.println("Resultado del xor de 2 objetos BigInteger : " + resultado); resultado = uno.or(dos); System.out.println("Resultado del or de 2 objetos BigInteger : " + resultado); resultado = uno.and(dos); System.out.println("Resultado del and de 2 objetos BigInteger : " + resultado); } }
Con esto concluye el tema de manejo básico de clase BigInteger, demostrando que es una gran ayuda para realizar operaciones con números con dígitos muy grandes.
Cualquier duda- comentario – sugerencia estoy a sus órdenes.
Muchas gracias por tu aporte
ResponderBorrarDe nada, un placer
BorrarExcelente, pero falta con lo de <= >= entre grandes enteros, etc, necesito ayuda.
ResponderBorrarClaro, en que podemos ayudarte?
BorrarQué necesitas exactamente?
como se agregaria para exponencias ejemplo 2 al 9765625 :c me manda infinito por el tipo de dato pow solo acepta double
BorrarExcelente, pero falta con lo de <= >= entre grandes enteros, etc, necesito ayuda.
ResponderBorrarHola muy buenas tardes... saludos , me piden en la carrera realizar lo siguiente sumar dos numeros extremadamente grandes, tres veces la longitud de tipo de dato de biginteger, de antemano gracias.
ResponderBorrarDisculpa la demora, con gusto te ayudamos.
Borrar¿Podrías decirnos las características de entrada del programa?
Buen día :D
Gracias, un saludo.
ResponderBorrar