Kernel Error
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

Screen

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

Untitled

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)

Main.class

Bueno eso es todo por los momentos.
Bye.

  • Twitter
  • Facebook
  • MySpace
  • Google Bookmarks
  • del.icio.us
  • Mixx
  • Digg
  • email

Comentarios

4 Respuestas to “Clase BigInteger en java”
  1. Nos veremos pronto

    Usando Internet Explorer 6.0 Internet Explorer 6.0 en Windows XP Windows XP

Comenta algo

Comparte tu opinión... recuerda que puedes usar BBCode!





BBCode Sencillo soportado.  

    Edición Avanzada desactivada.

Kernel Error
97 intentos de ataques detenidos