Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DanielPy en 15 Noviembre 2013, 22:46 pm



Título: Acceder de forma individual a cada digito de un número entero(sin sprintf)
Publicado por: DanielPy en 15 Noviembre 2013, 22:46 pm
Hola a todos.
Esta es la manera que estoy usando para poder acceder de forma individual a cada unos de los dígitos de un número, alguien sabe si se puede hacer lo mismo pero a mano o sea sin usar sprintf.- :huh: :huh: :huh:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4. #include <ctype.h>
  5.  
  6. int main(void) {
  7. int numero, i, longitud, ok = 0, ch;
  8. char cad[11];
  9.  
  10. do{
  11. system("cls");
  12. printf("\n Ingresa un numero entero(maximo %d)....: ", INT_MAX);
  13.        ok = scanf("%d", &numero) == 1 && numero >= 1 && numero <= INT_MAX;
  14.        while ((ch = getchar()) != EOF && ch != '\n');
  15. }while(!ok);
  16. sprintf(cad,"%d",numero);
  17. longitud = strlen(cad);
  18.  
  19. for(i = 0; i < longitud; i++){
  20. printf("\n Posicion[%d] %c ", i+1, cad[i]);
  21. }
  22.  
  23.        return 0;
  24. }

Bueno eso es todo.-
Un saludo.
Daniel
(http://i41.tinypic.com/2mhamg9.jpg)


Título: Re: Acceder de forma individual a cada digito de un número entero(sin sprintf)
Publicado por: xaps en 15 Noviembre 2013, 23:05 pm
Para obtener el último dígito de un número entero (N) puedes hacer:

Código:
int N;
//Obtenemos el valor de N
int numero = N%10;
N = N/10;

Lo que estás haciendo aquí es obtener el último dígito de N aplicándole módulo 10. Después, acortamos ese número una cifra por la derecha, eliminando el número que ya hemos separado. Si este fragmento de código se coloca dentro de un bucle, consigues obtener todos los dígitos de un número N.


Título: Re: Acceder de forma individual a cada digito de un número entero(sin sprintf)
Publicado por: DanielPy en 16 Noviembre 2013, 01:45 am
Hola xaps.
Excelente por lo menos es un comienzo, lo que resta es saber cómo acceder
Por ejemplo al 3 teniendo el siguiente número 12345 sin pasar por el resto,
Si lo tenes por favor ayudame.-

Código
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4.    int numero, digito = 0;
  5.    numero = 125483;
  6.    printf("\n El numero es: %d -- ", numero);
  7.    while(numero != 0){
  8.        digito = numero%10;
  9. printf("%d ", digito);
  10. numero = numero/10;
  11.    }
  12.  
  13.    return 0;
  14. }

Un saludo.
Daniel

(http://i41.tinypic.com/2mhamg9.jpg)


Título: Re: Acceder de forma individual a cada digito de un número entero(sin sprintf)
Publicado por: rir3760 en 16 Noviembre 2013, 01:57 am
lo que resta es saber cómo acceder
Por ejemplo al 3 teniendo el siguiente número 12345 sin pasar por el resto
Lo mejor es obtener cada uno de los dígitos mediante división y modulo como ya te comento xaps, esos dígitos los almacenas en un array para procesarlos después pero si lo piensas un poco estas haciendo de forma manual la misma operación que sprintf.

En cuanto al uso de esa función si el numero esta garantizado a ser positivo y lo imprimes con "%d" puedes ahorrarte la llamada a strlen utilizando:
Código
  1. longitud = sprintf(cad, "%d", numero);
Ya que el valor de retorno de sprintf es el numero de caracteres de la cadena generada sin contar el '\0'.

Un saludo


Título: Re: Acceder de forma individual a cada digito de un número entero(sin sprintf)
Publicado por: DanielPy en 16 Noviembre 2013, 02:36 am
Hola.
muchas gracias a los 2 por la ayuda, me quedare con sprintf, en cuanto a lo que decís que estoy haciendo lo mismo que con sprintf, eso lo tengo claro solo que me gusta saber cómo funcionan por dentro ciertas funciones.-

Un saludo.
Daniel

(http://i41.tinypic.com/2mhamg9.jpg)