Factorial Sencillo 2 en JAVA usando recursión y BigInteger

8 03 2009

Hola, por recomendación de mi viejo amigo phi mejore el código utilizando recursión y el tipo de dato BigInteger para no limitar al usuario a ingresar máximo un N de 20.

package javacertificationdmk.capitulo2;
import java.math.BigInteger;
import java.io.*;

/***
 *

Nombre      : FactorialSencillo.java

 *

Descripción : Se obtiene el factorial por recursividad usando BigInteger

 *

Fecha       : Marzo 7 de 2009

 * @author        : [D-m-K]
 * @version       : 1.0.0
 ***/

public class FactorialSencillo2 {
  public static void main(String[] args) throws IOException{
        //Pido el número
        System.out.println("\n\t O B T E N E R   F A C T O R I A L \n");
        int n = leerN("\t Ingresa el valor de N para obtener factorial : ");
        BigInteger factorial = obtenerFactorial(n);

        //Obtengo el factorial del número ingresado
        System.out.println("\n\t [R E S U L T A D O]\n");
        System.out.println("\t El factorial de " + n + " es : " + factorial);

  }

  /**
   * @param msg - Mensaje a mostrar para solicitar el valor de entrada
   * @return n - Valor ingresado de tipo entero
   * @throws java.io.IOException
   */
  public static int leerN (String msg) throws IOException{
      int n = 0;
      boolean error;
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      do{
        error = false;
        try{
            System.out.print(msg);
            n = Integer.parseInt(br.readLine());
            if(n < 1){
                System.out.println("\t ERROR : El numero no puede ser negativo\n");
                error = true;
            }
        }catch(NumberFormatException e){
            System.out.println("\t ERROR : El valor ingresado no es numerico\n");
            error = true;
        }
      }while(error);

      return n;
  }

  /**
   * @param n - numero a calcular
   * @return fac - Factorial del numero a calcular de tipo BigInteger
   */
  public static BigInteger obtenerFactorial(int n){
      if(n <= 1){
          return (new BigInteger("1"));
      }else{
          BigInteger fac = new BigInteger(String.valueOf(n));
          return (fac.multiply(obtenerFactorial(n - 1)));
      }
  }

}

PTA: Por fín estoy usando bien la documentación xDDD

Greetings to all and happy BandWidth.





Fáctorial sencillo en JAVA

8 03 2009

Bien al parecer estaba tan aburrido que esto fue lo unico que se me ocurrió… Básicamente obtiene el fáctorial de un número N (no mayor a 20, pues el resultado sería muy grande y sin precisión). Valida también el número ingresado.

/***
 * @Nombre      : FactorialSencillo.java
 * @Descripción : Obtiene el factorial de un numero cualquiera ingresado por el usuario
 * @Fecha       : Marzo 7 de 2009
 * @Autor       : [D-m-K]
 ***/

package javacertificationdmk.capitulo2;

//importo los packages necesarios para la entrada de datos
import java.io.*;

public class FactorialSencillo {
    public static void main(String[] args) throws IOException{

        //Pido el número
        System.out.println("\n\t O B T E N E R   F A C T O R I A L \n");
        int n = leerN("\t Ingresa el valor de N para obtener factorial : ");
        long factorial = obtenerFactorial(n);

        //Obtengo el factorial del número ingresado
        System.out.println("\n\t [R E S U L T A D O]\n");
        System.out.println("\t El factorial de " + n + " es : " + factorial);

    }

    static long obtenerFactorial(int n) throws IOException{
        long fac = 1;
        //Calculo factorial
        for(int i=1; i 20){
                System.out.println("\t ERROR : Changos ese numero generaria un resultado muy grande.\n");
                error = true;
             }
          }catch(NumberFormatException e){
              System.out.println("\t ERROR : El valor ingresado no corresponde a un numero.\n");
              error = true;
          }
       }while(error);
       //Retorno el número ingresado de tipo entero
        return num;
    }

}

Greetings to All and Happy BandWidth





Comprobando numeros pares en JAVA

7 03 2009

Bueno por ahi jodiendo un rato y teniendo en cuenta el dominio del ingreso de datos por consola quise demostrar que este código si funcaba. xD

/***
 * @Nombre      : CompruebaPar.java
 * @Descripción : Comprueba si un numero es par o no. usando datos de ingreso
 *                por teclado.
 * @Fecha       : Marzo 5 de 2009
 * @Autor       : [D-m-K]
 ***/

//Importo librerias necesarias
import java.io.*;

public class CompruebaPar {
    public static void main(String[] args) throws IOException{

        //Definición de variables
        int numero = 0;
        boolean error;
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        do{
            error = false;
            try{
                System.out.print("\n\t Ingresa un numero para comprobar si es PAR o IMPAR : ");
                numero = Integer.parseInt(in.readLine());
            }catch(NumberFormatException e){
                System.out.println("\t ERROR : Eso no es un numero :O, intenta de nuevo LOL.");
                error = true;
            }
        }while(error);

        //Valido numero.
        if(numero % 2 == 0){
            System.out.println("\t El número ingresado es PAR");
        }else{
            System.out.println("\t El número ingresado es IMPAR.");
        }

    }

}

Greetings to all and happy bandwidth.





Suma de pares entre un rango determinado :D

7 03 2009

Bueno, de puro desparche estaba leyendo un librito de JAVA en el cuál colocaban el siguiente retillo :D .

Desarrollar un programa que, a partir de dos numeros enteros dados, muestre en pantalla la suma de todos los numeros pares entre el rango de los dos numeros.

/***
 * @Nombre      : SumaPares.java
 * @Descripción : A partir de dos numeros ingresados por teclado, calcula la
 *                suma de todos los numeros pares existentes en el rango de los
 *                numeros ingresados
 * @Fecha       : Marzo 5 de 2009
 * @Autor       : [D-m-K]
 ***/

//Paquete principal de clases
package javacertificationdmk.capitulo2;

//importo librerias necesarias
import java.io.*;

public class SumaPares {
    public static void main(String[] args) throws IOException{

        //Definición de variables
        int a, b, mayor, menor, suma = 0;

        System.out.println("\n\tPor favor ingresa dos numeros para calcular la suma de los pares : \n");
        a = leer("\tNumero a : ");
        b = leer("\tNumero b : ");

        //Evaluo cual es mayor
        if(a > b)
        {
            mayor = a;
            menor = b;
        }else{
            mayor = b;
            menor = a;
        }

        //Calculo el rango.
        for (int i=menor; i<=mayor;i++){
            if(i%2 == 0)
                suma+=i;
        }

        System.out.println("\n\tLa suma de los pares entre " + menor + " y " + mayor + " : " + suma);

    }

    static int leer(String msg) throws IOException{
        int num = 0;
        boolean error;
        BufferedReader in =  new BufferedReader(new InputStreamReader(System.in));

        do{
            error = false;
            try{
                System.out.print(msg);
                num = Integer.parseInt(in.readLine());
            }catch(NumberFormatException e){
                System.out.println("\n\tEl Valor ingresado no es numerico :S");
                error = true;
            }
        }while(error);
        return num;
    }
}

Greetings to All and Happy bandwidth





Validando datos de entrada en Java

6 03 2009

Bien este humilde código sólo contiene un simple ejemplo del còmo se pueden restringir entrada de datos NO numericos en un campo que guardará un dato de tipo entero. Modificando el código o creando un método más agresivo se pueden usar metodos sobrecargados para evaluar el tipo de dato y seria mucho mejor.

/***
 * @Nombre      : ValidaDatoEntero.java
 * @Descripción : Valida un dato entero ingresado por teclado
 * @Fecha       : Marzo 5 de 2009
 * @Autor       : [D-m-K]
 ***/
package javacertificationdmk.capitulo2;

import java.io.*;

public class validaDatoEntero{
    public static void main(String[] args) throws IOException{
        int numero;
        boolean error;
        BufferedReader dato = new BufferedReader(new InputStreamReader(System.in));

        do{
            error = false;
            try{
                System.out.print("\n\t Ingresa un numero : ");
                numero = Integer.parseInt(dato.readLine());
            }catch(NumberFormatException e){
                System.out.println("\t ERROR : Eso no es un numero :O, intenta de nuevo LOL.");
                error = true;
            }
        }while(error);

        System.out.println("\n\t Bien parce Si llegaste hasta aquí todo funca bien.");
    }
}

Greetings to all and happy BandWidth