Programando en C – Cifras de un número

You may also like...

42 Responses

  1. masc says:

    hola una duda al respecto de este cogido si pongo un numero con mas de 10 caracteres este me tira 1

    • eodos says:

      Hola masc. Si te das cuenta, cuando introduces el número lo almacenamos en una variable de tipo double (d). Este tipo tiene un límite en la longitud de su valor. Para números más largos puedes usar long double (ld).

  2. jjj says:

    Hola quería saber el porque se divide el numero entre 10 y se le pone un contador

    • eodos says:

      Cada vez que divides el número entre 10 lo que haces es quitarle un dígito, el cual cuentas con el contador.
      Por ejemplo el número 1350.
      contador=1
      1350/10 = 135, contador=2
      135/10 = 13, contador=3
      13/10 = 1, contador=4
      Y acaba al ser 1 menor que 10.

  3. Álvaro says:

    Muchas gracias por el ejercicio! Un saludo de un iniciador a C

  4. Julian says:

    No entendi la condicion del while.. Si el numero / 10 > 0 entonces pasa el cuerpo del while.. Ademas, porque dividido diez.. Diez digitos son los que le pusiste a tu numero?

    • eodos says:

      Si (numero/10 > 0) quiere decir que el número es mayor que 10, y por tanto podemos “quitarle” una cifra y repetir el procedimiento hasta que sea menor que 10. Puede hacerse de muchas formas.

  5. Maximiliano says:

    Hola. La verdad que me ha servido para entender como hacerlo con ciclos, ya que yo había complicado las cosas al hacerlo utilizando logaritmos. Muchas gracias. Saludos.

  6. Saiki says:

    Hola 🙂 Quería saber como se puede hacer si tengo un numero no entero, como puedo saber cuantos números decimales tiene, para saber los enteros ya lo entendí perfectamente, muchas gracias.

    • eodos says:

      Hola. Esa pregunta no tiene una respuesta fácil. Cuando tienes una variable flotante, sea float o double, ese número está siendo almacenado con una precisión fija, lo cual quiere decir que si quieres almacenar el número 0.1, la representación binaria de ese número no cabe en 32 bits (variable float) y por tanto lo que vas a almacenar es una aproximación a ese número que ocupe menos de 32 bits, en este caso 0.10000000000000001. Por ese motivo, una vez un número está almacenado en una variable float o double, no puedes extraer los dígitos que tiene. Diferente caso sería si el número está almacenado en un string (char*).

  7. el diablo says:

    esta bueno pero no satiface mi necesidades

  8. bloblo says:

    y si el numero a controlar es negativo?? como seria?? Un saludo

  9. betty says:

    y como seria si este mismo ejercicio lleva DO-WHILE

    • eodos says:

      Puedes reemplazar el while por un do-while, pero tendrías que añadir una condición de salida al principio del programa que compruebe si num<10 y devuelva 1 en ese caso. Un saludo.

  10. betty says:

    de la salida que me dices no te entendí bien 😀

    int main()
    {
    int n, x = 0;
    do
    {
    cout << "ingrese numeros" <> n;
    n = n / 10;
    x<10;
    cout << "el numero tiene " << x << " cifras" << endl;
    } while (n != 0);
    _getch();
    }

    • eodos says:

      Algo así:

  11. Luis Espejo says:

    Hola, sabes que llevo dias buscando ayuda, queria saber como es posible contar la cantidad de ciertos digitos que tenga un numero, por ejemplo, al introducir el numero 100, me diga que tengo 1 digito 1 y 2 digitos 0.

    • eodos says:

      Hola! Puedes reusar este código. Cada vez que que en el bucle while divides entre 10, puedes obtener el dígito que has eliminado calculando num%10, y llevando la cuenta en un array de cuantas veces has encontrado ese dígito.

      Algo así:

      Después del bucle while, dentro del array contador tendrás los valores que buscas:
      contador[0]: veces que aparece el dígito 0,
      contador[1]: veces que aparece el dígito 1,
      etc.

  12. Carlos Artigas says:

    Hola sabes que necesito validar numeros de tarjetas, pero tengo un problema en el tema de los digitos (no en contarlos) sino en el tema de la cantidad de digitos la cual me ingresa, necesito que sea mayor a 13 digitos, tengo esto ;

    printf(“Ingrese el numero de tarjeta\n “);
    scanf(“%ld”, &num );
    while (num > 9999999999999)
    {
    printf (“Ingrese un numero de tarjeta valido\n “);
    scanf(“%d”,&num);
    }

    • Carlos Artigas says:

      si me pudieras ayudar, te lo agradeceria demasiado, gracias

    • eodos says:

      Hola, tienes 2 opciones:
      1) Leer la entrada como string o char* y luego procesarla. Asi no tendrías límite en el número de dígitos que puedes leer.
      2) Leer el número como uint64_t (unsigned long), que te permite almacenar 64 bits (el valor máximo sería 2^64 = 18446744073709552000). Podrías almacenar hasta 19 dígitos de esta forma.

      • Carlos Artigas says:

        hice el mismo código que tu propusiste, y cambie el int num por un unsigned long y aún así no puede saber cuantos digitos tiene un numero mayor de 11 digitos /:, estaba pensando que a lo mejor era mi computador:

        unsigned long num = 1 ;
        int k = 1 ;

        printf(“Ingrese el numero de tarjeta\n “);
        scanf(“%li”, &num);

        // CANTIDAD DE DÍGITOS DE LA TARJETA //

        while ( num / 10 > 0 )
        {
        num = num / 10 ;
        k++ ;
        }
        printf (“Su numero de tarjeta tiene [%d] digitos\n”, k) ;

  13. Carlos Artigas says:

    hice el mismo código que tu propusiste, y cambie el int num por un unsigned long y aún así no puede saber cuantos digitos tiene un numero mayor de 11 digitos /:, estaba pensando que a lo mejor era mi computador:

    unsigned long num = 1 ;
    int k = 1 ;

    printf(“Ingrese el numero de tarjeta\n “);
    scanf(“%li”, &num);

    // CANTIDAD DE DÍGITOS DE LA TARJETA //

    while ( num / 10 > 0 )
    {
    num = num / 10 ;
    k++ ;
    }
    printf (“Su numero de tarjeta tiene [%d] digitos\n”, k) ;

  14. Carlos Artigas says:

    quisiera saber si me podrias ayudar en el tema de que estoy imprimiendo el numero y la cantidad de digitos pero me muestra un numero distinto al que ingreso, como por ejemplo : num = 9759 e imprime num = 2157386374824, he leido harto pero solo haba de los %d,i (me pasaba con los enteros pero ahora uso float )

  15. Ericka says:

    Sí inserto más de 10 números me sale error ayuda

  16. smith says:

    Hola, no entiendo cómo es posible que un 0.008 sea mayor que cero ¿ alguien puede explicarme, por favor?

  17. Ariel says:

    Hola. Quiero simplemente aportar mi experiencia personal, cada programador adoptará su estilo para programar.
    Hace varios años que programo y con el tiempo descubri que en muchos casos es conveniente trabajar unicamente con string’s.
    Se que se trata de matematica pero mientras no sea absolutamente necesario tener guardado un numero por cuestiones de calculo.
    Si solo se trata de saber cuantos digitos tiene basta con strlen, o incluso la funcion getline. Solo me cree una funcion que indica si un string es es numero o no.
    Por ejemplo: int isinteger(char*); y int isdecimal(char*); de esta forma el codigo queda super sintetico de la siguiente manera:

    int main()
    {
    char *ptrIn=NULL;
    size_t buf=0;
    size_t digitos=0;

    digitos=getline(&ptrIn,&buf,stdin); // OJO!!!; quitar el ‘\n’
    clnstr(ptrIn);
    if(isinteger(ptrIn))
    printf(“El numero tiene %zu digitos\n”, digitos);
    return 0;
    }

    Y las mismas funciones me sirben para cualquier proyecto futuro.

  18. Kia says:

    Hola! alguien sabe como calcular el numero de cifras de un numero con coma, es decir flotante? por ejemplo 5.126, tendria 4 cifras, con el codigo propuesto solamente se cuenta las de la izquierda de la coma. Gracias!

    • eodos says:

      Hola. Esa pregunta no tiene una respuesta fácil. Cuando tienes una variable flotante, sea float o double, ese número está siendo almacenado con una precisión fija, lo cual quiere decir que si quieres almacenar el número 0.1, la representación binaria de ese número no cabe en 32 bits (variable float) y por tanto lo que vas a almacenar es una aproximación a ese número que ocupe menos de 32 bits, en este caso 0.10000000000000001. Por ese motivo, una vez un número está almacenado en una variable float o double, no puedes extraer los dígitos que tiene. Diferente caso sería si el número está almacenado en un string (char*).
      Por lo tanto te recomiendo que el numero lo guardes en un char* o std::string, y simplementes leas la longitud del string.

  19. José Manuel says:

    Tu codigo tiene un error, es que cuando pones la condicion de tu repetitiva, agregas una divicion, eso tal a causado mucho errores, tu pones while(num/10>0) estube probando y la escritura mas facil era while(num>10), digo, de esa forma a mi me salio, tal vez, es mal o tal vez estoy bien, solo es cosa probar

  20. Dani Herrera says:

    Hola, muy bueno el programa
    Como podria cambiar de posicion digitos?
    Por ejemplo cambiar el segundo digito con rl último
    Porfavor

    • eodos says:

      Puedes convertir el número a un string, o a un array de ints, e intercambiar los valores que te interesan. La lógica es similar, sigues diciendo el número entre 10 para extraer los dígitos que te interesan.

  21. Dani Herrera says:

    Hola una pregunta
    Como podria cambiar de posicion los digitos de un numero
    Por ejemplo cambiar el segundo digito con el ultimo
    Porfavor

  22. Crista Angelica Chacon Cisneros says:

    Por razones de seguridad bancaria, un número entero se considera una clave válida si NO tiene dos dígitos consecutivos iguales. Escriba un método esClaveValida() que devuelva true si el atributo valor de la clase Numero, mostrada en el recuadro, es un número de clave válida o false si no lo es.

    Por ejemplo,

    634473 NO es un número de clave válido porque contiene dos dígitos 4 consecutivos.
    54235 SÍ es un número de clave válido porque no contiene dos dígitos iguales consecutivos.
    no logro hacer eso lo necesito en C++ puedes ayudarme? Gracias

  23. pepe says:

    bro tengo que hacer un programa que pida por teclado un número entero positivo de hasta tres cifras y muestre un mensaje indicando si tiene 1, 2, o 3 cifras. Mostrar un mensaje de error si el número de cifras es mayor. es decir si introduzco 10 me indicara que tiene dos cifras, si ingreso 40000 me indicara error el número es mayor de tres cifras.

  24. pepe says:

    se supone que es para hoy bro, agradecería mucho tu ayuda……estupidos y sensuales profesores que nada mas mandan PFD´s a lo tonto sin antes explicar bien >:v

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies