Funcion java para encontrar numeros

publicado por: Anonymous

Estoy intentando escribir un programa para mostrar la lista de números capicúa primos de un número de cifras ingresado por el usuario (entre 2 y 15). Yo ya tengo las funciones de capicúa y primo.

Pero el problema que tengo es cómo hacer la función para que introducido ese número de 2 a 15, imprima los números.

Si la entrada es 2, hago (2/2)*10 y hasta el 99, haciendo que imprima el 11 (único primo y capicúa de 2 cifras).

Pero no sé materializarlo en un bucle.

solución

Para eso necesito una función que obtenga cada dígito. En el siguiente enlace, se puede ver una respuesta bastante buena.

https://stackoverflow.com/questions/29612712/how-to-make-a-really-compact-getdigit-method

public static int obtener_digito(int numero, int posicion)
{
    return (numero/(int)Math.pow(10,posicion))%10;
}

Usando esa función, se puede ir comprobando uno por uno, de afuera hacia adentro para ver si son iguales los dígitos.

public static Boolean es_capicua(int numero)
{
    Boolean es_capicua_actual = true;
    int longitud=(int) Math.log10(numero);
    for (int i = 0; i <= longitud/2; i++)
    {
        int izquierda = obtener_digito(numero,i);
        int derecha = obtener_digito(numero,longitud-i);
        if( izquierda!=derecha )
        {
            es_capicua_actual = false;
            break;
        }
    }
    return es_capicua_actual;
}

También se necesita una función para saber si un número es primo. Por suerte la encontré, chusmeando un poco por el sitio.

https://es.stackoverflow.com/tags/funciones/info

El único problema es que está en C, pero lo convierto a Java.

public static Boolean es_primo(int numero)
{
    Boolean es_primo_actual = true;
    if(numero<2)
    {
        es_primo_actual = false;
    }
    else
    {
        for(int x=2; x*x<=numero; x++)
        {
            if( numero%x==0 ){es_primo_actual = false;break;}
        }
    }
    return es_primo_actual;
}

Resolviendo el problema principal:

En internet encontré cómo se hace para pedir datos por teclado. Se declara un escáner, luego se le requieren números al usuario, y por último se cierra el escáner.

http://puntocomnoesunlenguaje.blogspot.com.ar/2012/08/java-scanner.html

System.out.print ("Ingrese un numero del 2 al 15:n");
Scanner teclado = new Scanner(System.in);
int n = teclado.nextInt();
teclado.close();

También, cómo mostrar algo en pantalla.

https://www.programarya.com/Cursos/Java/Salida-De-Datos

System.out.print(i);

Entonces, se puede comprobar con un if si el número está entre el 2 y el 15, de esta manera. Por último, comprobar que los números que se vayan a mostrar sean capicúas, primos, y que tengan cierta cantidad de cifras. Para eso uso Math.pow, para generar un número que sea potencia de 10, es decir, nosotros usamos el sistema numérico decimal.

if(n>=2 & n<=15)
{
    int potencia_10_actual=(int) Math.pow(10,n-1);
    int potencia_10_siguiente=10*potencia_10_actual;
    for(int i=potencia_10_actual;i<potencia_10_siguiente;i++)
    {
        if( es_primo(i) && es_capicua(i) )
        {
            System.out.print (i+" ");
        }
    }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *