style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Separar números

Hola amigos, mi nombre es MiKe y quiero estrenar mi cuenta publicando en este blog.

Buscando en mi PC, encontré un programa que realicé cuando apenas estaba me iniciaba en JAVA, la propuesta del problema era del libro de Deitel. En la cual se pide que al teclear un numero de 5 digitos, este muestre los números separados. Por ejemplo si escribes 13573, se debe desplegar: 1 3 5 7 3. Estuve buscando ayuda por Internet y no encontré. Y resulta que el problema era mas de matemáticas que de programación. A continuación les mostraré como resolverlo matemáticamente y posteriormente el código fuente.

La clave esta en obtener el residuo del numero dividido entre 10, y nos dará como resultado el quinto dígito del número tecleado.

Para obtener el cuarto dígito, debemos dividir el numero original entre diez y hacer la misma operación: obtener el residuo del numero dividido entre 10. Como son 5 dígitos, haremos 5 veces la operación.

Si tengo 13573

quintodigito = 13573%10 y el resultado es 3(residuo)

13573/10 = 1357

cuartodigito = 1357%10 y el resultado es 7

1357/10 = 135

tercerdigito = 135%10 y el resultado es 5..........

Me despido y les deseo éxito en todo. Les dejo el código fuente. Lo probé en netbeans y corrió bien.
saludos........

import java.util.Scanner;

public class Separar {
    public static void main ( String args[] )
    {
     Scanner teclear = new Scanner(System.in);
     int numero;
     
     int quinto;
     int cuarto;
     int tercero;
     int segundo;
     int primero;
             
          System.out.print("Escribe un numero de 5 digitos: \n" );
        numero = teclear.nextInt();

       quinto = numero%10;

   

        numero = numero/10;
        cuarto = numero%10;

       

        numero = numero/10;
        tercero = numero%10;

 

        numero = numero/10;
        segundo = numero%10;
 

        numero = numero/10;
        primero = numero%10;

 

        System.out.printf("Los numeros separados son:");
        System.out.printf("%d  %d  %d  %d  %d  \n", primero, segundo, tercero, cuarto, quinto);

        System.out.printf("Ahora al reves: \n");
        System.out.printf("%d %d %d %d %d \n", quinto, cuarto, tercero, segundo, primero);
               
    }
}

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Nopalin

wtf?

no entiendo la finalidad de este ejemplo, ¿qué estás tratando de buscar? ¿¿los miles, centenas, decenas ?? o simplemente separar los digitos de un número?

Imagen de ezamudio

Ejercicio

Es un simple ejercicio. Hay varias maneras de resolverlo. Una es la que publicaron aquí; se me ocurren otras como hacer un ciclo para ir tomando el módulo 10 y guardarlo en un arreglo, dividir el número entre 10 y seguir hasta que el número sea menor a 10, luego imprimir los números del arreglo (así funciona sin importar cuántos dígitos haya).

Otra manera es convertir el número a string y luego un ciclo por los caracteres de la cadena, imprimiendo el charAt() con la posición de la iteración.

Supongo que sirve para ver qué solución implementa cada quién, lo cual puede tomarse como una muestra de sus habilidades como programador, no solamente en el manejo del lenguaje Java sino en este caso en particular para abstraer un problema e implementar una solución que puede resolver solamente el problema específico que se planteó, o que resuelva otros problemas similares (sin tratar de sobregeneralizar; alguien que se vaya a usar BigInteger porque piensa que el int le queda chico tal vez exagera un poco).

Imagen de Shadonwk

voto por charAt(i);

voto por charAt(i); jejjejeje mas facil mas sencillo menos codigo mas limpio...

Imagen de echan

excelente ejercicio

ahi va mi aporte con recursion ... le tengo que pasar un argumento adicional a la funcion para que se vaya acumulando el resultado.

public class Digito {
    public static void main(String[] args) {
        System.out.println( separa(52364, "") );        
    }
   
    private static String separa(int n, String r){
        if( n < 10 )
            return r;        
        else if ( n/10 >= 1000 && r.equals(""))
            return separa(n, " "+n%10);
        else
           return separa(n/10, " "+(((n/10))%10) + r );
    }    
   
}
Imagen de marcosaw

demasiado código

Si el objetivo solo es imprimirlos separados, ¿Para qué meter el tema matemático?

public class Separar {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Ingresa un numero entero:");
        Integer numeros = scan.nextInt();
        char[] nums = numeros.toString().toCharArray();
        for(char c: nums) {
            System.out.print(c + " ");
        }        
    }
}

De hecho

Realmente me perdi cuando empezo con las divisiones, que no son necesarias pero es algo curioso, aunque obivamente esta solución no es la mas rapida y supongo que el libro queria algo como la solución de simplemente concatenar y agregar un espacio.

@jesusperales Solo por

@jesusperales Solo por curiosidad, ¿Cómo encontraste esta pregunta?

Re: separar números

 

¿Qué hay de usar una expresión regular? Ejemplo:

int num = 13573;
String str = String.valueOf(num).replaceAll("(?!^)(?=\\d)", " ");
StringBuilder sb = new StringBuilder(str);

System.out.println(sb);           // prints "1 3 5 7 3"
System.out.println(sb.reverse()); // prints "3 7 5 3 1"

~~~

Me gusta más la respuesta de

Me gusta más la respuesta de marcosaw ( de hace dos años. De nuevo como dan con estas preguntas?)

Para psss como Java 8 es lo cool ahora

class Separar {
    public static void main( String ... args ) {
        args[0].chars().forEach( c -> {
            System.out.print( (char) c );
            System.out.print( ' ' );
        });
    }
}
// java Separar 13573
// 1 3 5 7 3

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">