Programacion
Clase BigInteger en java
19 de Agosto del 2009 por Kalith · 4 Comentarios
Buenas.
A diferencia de lo que muchos creían no habia fallecido, ni habia sido abducido por aliens ni nada que se le parezca, por motivos de la universidad y de otros compromisos personales que no valen la pena contar he estado ausente del blog. A lo que voy, existen problemas que las soluciones implican computar números tan grandes que no pueden ser usados tipos de datos nativos para ello, y hacer operaciones tan elementales como una suma o una división pueden complicarse muchísimo, ya en su momento tanto Llyn como yo hablamos de sumar numeros gigantes en c++ utilizando cadenas (std::string), esta vez vamos a usar java que con sus clases nos facilitan un monton la existencia para casos bien particulares
la forma de trabajar BigInteger podemos directamente usar un constructor con parametros o luego asignarle un valor, hay que aclarar que si el valor que se le va a pasar es una cadena, vease un numero muy grande en una cadena tiene que ser creado el objeto con esa cadena como parametro del constructor veamos dos casos
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException
{
BigInteger bi = new BigInteger;
bi.valueOf(500000);
BigInteger bi2 = new BigInteger("10000000000000000000000000000000000000000000000");
}
}
podemos ver dos de las varias formas de inicializar la clase veamos un ejemplo para operaciones básicas.. supongamos que los numeros los obtendremos de entradas por teclado..
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BigInteger bi1 = new BigInteger(in.readLine());
BigInteger bi2 = new BigInteger(in.readLine());
// Suma
System.out.print("La suma es: ");
System.out.println(bi1.add(bi2));
// Multiplicacion
System.out.print("El producto es: ");
System.out.println(bi1.multiply(bi2));
//Cociente (siempre el segundo diferente de 0)
System.out.print("La division es: ");
System.out.println(bi1.divide(bi2));
//Diferencia
System.out.print("La resta es: ");
System.out.println(bi1.subtract(bi2));
}
}
una imagen habla mas que mil palabras
asi podemos seguir revisando las clases y encontrando cosas utiles veamos un ejemplo mas ya conocido el factorial de un numero, y tambien aprovechamos y vemos como convertir BigInteger a String
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
long tope;
System.out.print("Ingrese un numero: ");
tope = Long.parseLong(in.readLine());
BigInteger bi = new BigInteger("1");
for(int i = 2; i <= tope; ++i)
bi = bi.multiply(BigInteger.valueOf(i));
System.out.print(String.valueOf(tope) + "!: ");
System.out.println(bi);
//Convertimos el BigInteger en string y averiguamos su longitud
System.out.println(bi.toString().length());
}
}
nuevamente una imagen para el factorial de 1000
vale la pena acotar que calcule el factorial para 100000 y pues si se tardo un buen rato (pueden comprobarlo ustedes mismos) y la longitud del mismo fue de 456574 digitos. Aqui tiene el programa ya en bytecode solo hay que ejecutarlo (java Main)
Bueno eso es todo por los momentos.
Bye.
- Posts Relacionados
- 500! Buenas. Hace unos días en un post sobre permutaciones dabamos...
- C#: Clase para conversion de sistemas numericos Buenas.. Un pequeño code de una clase para convertir sistemas...











Nos veremos pronto
Usando