Separar numeros en digitos individuales

Iniciado por dmacias, 5 Enero 2014, 00:42 AM

0 Miembros y 1 Visitante están viendo este tema.

dmacias

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

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

SoyelRobert

#2
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 :)
getting louder!

dmacias

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


#include <stdio.h>

int main()
{
int numero, a, b, c, d, e;

printf("Escribe un numero entero con 5 digitos: ");
scanf("%d", &numero);

if (numero >= 10000){
if (numero <= 99999){
a = numero / 10000;
b = (numero % 10000) / 1000;
c = (numero % 10000) % 1000 / 100;
d = ((numero % 10000) % 1000) % 100 / 10;
e = (((numero % 10000) % 1000) % 100) % 10;

printf("%d   %d   %d   %d   %d\n", a, b, c, d, e);
}
}
return 0;
}


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

leosansan

#4
¿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 (cpp) [Seleccionar]

#include <stdio.h>
#define N 19

int main( void )
{
  int c, i, n;
  int digitos[N];
  unsigned long long int num;

  printf( "Escribe un numero de %d digitos como maximo: ", N );
  fflush( stdout );
  num = 0;
  for( n = 0; n < N && (c = getchar()) != '\n'; n++ )
  {
     digitos[n] = c - '0';
     num *= 10;
     num += digitos[n];
  }
  printf( "Digitos: " );
  for( i = 0; i < n; ++i )
     printf( " %3d,", digitos[i] );
  return 0;
}


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

Código (cpp) [Seleccionar]

#include <stdio.h>
#define N 100

int main( void )
{
  int i, n;
  char digitos[N];
  printf( "Escribe un numero de %d digitos como maximo: ", N );
  fflush( stdout );
  scanf ("%s",digitos);
  /*cuento los digitos*/
  for (n=0;digitos[n]!='\0';n++);
 /*los imprimo*/
  for (i=0;i<n;i++)
   printf ("%3c",digitos[i]);
  return 0;
}


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



dmacias

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

leosansan


¡¡¡Sorry, muchos sorry!!!

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



roderick

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);
        }
    }

Beginner Web

Lo que exactamente pediste fue esto
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>
#include <math.h>

using namespace std;

int main(){

int n=54321, exponente=4, auxiliar;
for(int i=0;i<5;i++){
auxiliar=pow(10.0,exponente);
cout<<n/auxiliar<<"   ";
n-=(n/auxiliar)*auxiliar;
exponente--;
}
cout<<endl;
system("pause");
}


Seria mas facil con pilas
Código (cpp) [Seleccionar]
while(n>0){
push(p,n%10);
n/=10;
}
while(empty(p)==false)
cout<<pop(p)<<"   ";
7w7