Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dmacias en 5 Enero 2014, 00:42 am



Título: Separar numeros en digitos individuales
Publicado por: dmacias en 5 Enero 2014, 00:42 am
Hola a todos
Soy muy nuevo en esto de la programación, justo empece hace unos dias a aprender C y ya tengo mi primer problema asi que vengo a pedir consejo o alguna pista.

El libro que estoy siguiendo es el de deitel, la 4ª edicion y me quede atascado en el siguiente problema

Escriba un programa que introduzca un numero de cinco digitos, que separe el numero en sus digitos individuales y que despliegue los digitos separados entre si mediante 3 espacios cada uno. [Pista: Utilice combinaciones de la division entera y el operador modulo]

Lo llevo todo bastante bien por el momento, pero no se me ocurre el como puedo hacer para separar los digitos, supongo que mas que un problema con el lenguaje es de planteamiento, pero bueno. Por ahora el libro solo a tocado printf, scanf e if
Decir tambien que apenas tengo estudios y los que tengo son de la edad del bronce xD asi que no seais muy malos conmigo  :P

Un saludo


Título: Re: Separar numeros en digitos individuales
Publicado por: do-while en 5 Enero 2014, 01:09 am
¡Buenas!

Pues lo primero que tendrás que hacer es asegurarte que el número x introducido es de cinco cifras, es decir, que 10000 <= x <= 99999, si no es así, no tienes que hacer nada, ya que el problema solo te dice lo que tienes que hacer con números de cinco cifras, no con el resto.

Ahora el problema estaría en las matemáticas. Un numero es una suma de cifras entre 0 y 9 multiplicadas por potencias de 10:

- 23 = 2*10 + 3
- 146 = 1*100 + 4 * 10 + 6
- 6248 = 6 * 1000 + 2 * 100 + 4 * 10 + 8

Una vez que sabes, esto, tienes que acordarte del algoritmo de la división. dividendo = divisor * cociente + resto, y 0 < resto < divisor. (simplificando...)

si tengo un numero de tres cifras, abc, a = abc / 100, b = (abc % 100) / 10 y c = abc % 10 (recuerda que en C, si tanto el dividendo como el divisor son números enteros, la división da como resultado el cociente del algoritmo de la división entre enteros)

Ahora solo tienes que aplicar todo esto a un numero de cinco cifras.

¡Si te lías con el código avisa!

¡Saludos!


Título: Re: Separar numeros en digitos individuales
Publicado por: SoyelRobert en 5 Enero 2014, 01:25 am
el truco esta en tener en cuenta que el operador /  toma el cociente de la division (parte entera)  y el % toma el resto.

con esto y lo que te han dicho arriba... lo tienes hecho :)


Título: Re: Separar numeros en digitos individuales
Publicado por: dmacias en 5 Enero 2014, 09:40 am
Muchas gracias a los dos, en cuanto os leí me puse a ello y ya está solucionado  ;-) . Veo que ando flojo en mates y logica.
Aqui os pego lo que ha salido

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. int numero, a, b, c, d, e;
  6.  
  7. printf("Escribe un numero entero con 5 digitos: ");
  8. scanf("%d", &numero);
  9.  
  10. if (numero >= 10000){
  11. if (numero <= 99999){
  12. a = numero / 10000;
  13. b = (numero % 10000) / 1000;
  14. c = (numero % 10000) % 1000 / 100;
  15. d = ((numero % 10000) % 1000) % 100 / 10;
  16. e = (((numero % 10000) % 1000) % 100) % 10;
  17.  
  18. printf("%d   %d   %d   %d   %d\n", a, b, c, d, e);
  19. }
  20. }
  21. return 0;
  22. }
  23.  

Y funcionar funciona ya puedo seguir estudiando pero no dudeis que me vereis por aqui todos los dias con dudas  ;D


Título: Re: Separar numeros en digitos individuales
Publicado por: leosansan en 5 Enero 2014, 10:13 am
¿Y que pasa si el número tiene quince cifras?. Casi se te acabaría el abecedario, por no hablar de la longitud del código.

Este es un caso típico para usar un bucle o una función recursiva o, como en el caso que te propongo, tomar el número como cadena e ir transformando cada uno de los dígitos:

Citar

Escribe un numero de 20 digitos como maximo: 12345678901234567890
Digitos:   1  2  3  4  5  6  7  8  9  0  1  2  3  4  5  6  7  8  9  0



Código
  1. #include <stdio.h>
  2. #define N 19
  3.  
  4. int main( void )
  5. {
  6.   int c, i, n;
  7.   int digitos[N];
  8.   unsigned long long int num;
  9.  
  10.   printf( "Escribe un numero de %d digitos como maximo: ", N );
  11.   fflush( stdout );
  12.   num = 0;
  13.   for( n = 0; n < N && (c = getchar()) != '\n'; n++ )
  14.   {
  15.      digitos[n] = c - '0';
  16.      num *= 10;
  17.      num += digitos[n];
  18.   }
  19.   printf( "Digitos: " );
  20.   for( i = 0; i < n; ++i )
  21.      printf( " %3d,", digitos[i] );
  22.   return 0;
  23. }
  24.  

Claro que si lo que queremos es exclusivamente imprimir las cifras esto irá mejor, puedes meter cuantas cifras quieras:

Código
  1. #include <stdio.h>
  2. #define N 100
  3.  
  4. int main( void )
  5. {
  6.   int i, n;
  7.   char digitos[N];
  8.   printf( "Escribe un numero de %d digitos como maximo: ", N );
  9.   fflush( stdout );
  10.   scanf ("%s",digitos);
  11.   /*cuento los digitos*/
  12.   for (n=0;digitos[n]!='\0';n++);
  13.  /*los imprimo*/
  14.   for (i=0;i<n;i++)
  15.    printf ("%3c",digitos[i]);
  16.   return 0;
  17. }
  18.  

¡¡¡¡ Saluditos! ..... !!!!


(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/dancer2_zpsd374ef8f.gif)


Título: Re: Separar numeros en digitos individuales
Publicado por: dmacias en 5 Enero 2014, 11:33 am
Supongo que todo eso que me comentas será mejor, solo tengo el problema que recien empiezo, jamas he visto #define, void, unsigned long long, fflush( stdout ), for, getchar, .........etc . Puro mandarin para mi ahora mismo  :rolleyes: jajajaja.

Solo he dado 2 temas del libro, en los que se ha visto solo printf, scanf, return e if, dar tipo y valor a una variable, comentarios, %d, \n, \t, etc....

creo no haberme dejado ninguno atras.

Un saludo


Título: Re: Separar numeros en digitos individuales
Publicado por: leosansan en 5 Enero 2014, 12:03 pm

¡¡¡Sorry, muchos sorry!!!

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Separar numeros en digitos individuales
Publicado por: roderick en 13 Noviembre 2018, 21:48 pm
en java:

 public static void main(String[] args) {
       
        Scanner teclado=new Scanner(System.in);
        int num=0;
        int aumento=10;
        int div=1;
        int numeros[]=null;
        do {           
         System.out.println("Ingresa un numero: (numero mayor que cero y menor de 7 digitos)");
         num=teclado.nextInt();         
        } while (num<1 || num>999999);
       
        String num2=String.valueOf(num);
        numeros=new int[num2.length()];
        for (int i = 0; i < num2.length() ; i++) {
           
            numeros=num%aumento/div;
            aumento=aumento*10;
            div=div*10;
        }
       for (int i = numeros.length-1; i >=0; i--) {           
        System.out.println(""+numeros);
        }
    }


Título: Re: Separar numeros en digitos individuales
Publicado por: Beginner Web en 14 Noviembre 2018, 02:45 am
Lo que exactamente pediste fue esto
Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9. int n=54321, exponente=4, auxiliar;
  10. for(int i=0;i<5;i++){
  11. auxiliar=pow(10.0,exponente);
  12. cout<<n/auxiliar<<"   ";
  13. n-=(n/auxiliar)*auxiliar;
  14. exponente--;
  15. }
  16. cout<<endl;
  17. system("pause");
  18. }

Seria mas facil con pilas
Código
  1. while(n>0){
  2. push(p,n%10);
  3. n/=10;
  4. }
  5. while(empty(p)==false)
  6. cout<<pop(p)<<"   ";