Programando en C – Cifras de un número

You may also like...

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

  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í:

      int contador[10] = {0}; // Inicializas un array de 10 digitos donde vas a almacenar los contadores
      while (num/10 > 0) {
        int digito = num%10;
        contador[digito]++;
        num /= 10;
      }
      

      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.

    • eodos says:

      Estoy de acuerdo contigo. Este post lo escribí hace nueve años cuando estaba aprendiendo C. Muchas cosas han cambiado desde entonces 😄

  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

  25. Villasante benites says:

    Me piden hallar la cantidad de digitos ceros de un numero .
    Como lo hago?

  26. Leonardo Fernandez says:

    tengo el siguente codigo en php en la condicion ñe pongo > 1 y asi si me funciona, no conoco mucho de C pero que de diferent se maneja para que cambia asi el valor ? supongo que la declaracion de las variables, pero quiero asegurarme, gracias
    $numero = 25.45484;
    $num = $numero;
    $i = 1;
    while (($num/10) > 1) {
    $num = $num / 10;
    $i++;
    }
    echo “El numero $numero tiene $i cifras decimales “;

  27. Jonathan says:

    Hola bro, tengo que hacer este programa en lenguaje java pero no se como hacerlo… puedes ayudarme??
    1. Diseñar un programa que solicite la temperatura ambiente ( T ) en grados centígrados. Al leer la temperatura debe aparecer uno de los
    siguientes mensajes:
    • Si la temperatura es menor o igual a 10 debe decir “Hace mucho frío”
    • Si T está entre 11 y 16 debe decir “Hace frío”
    • Si T está entre 17 y 25 debe decir “Está templado”
    • Si T está entre 26 y 32 debe decir “Hace calor”
    • Si T es mayor o igual a 33 debe decir “Hace mucho calor”

  28. Alejandro Caro says:

    ¿Cómo puedo modificar el código para que me muestre las cifras separadas? Por ejemplo si ingreso 1234 me devuelva 1 2 3 4, la cantidad de cifras que lo componen separadas por un espacio

    • eodos says:

      Buenas, hay varias maneras de hacerlo.
      Lo mas sencillo seria convertir el numero int a un string (char *) y luego iterar cada caracter del string e imprimirlo.
      Otra opcion es, sabiendo ya cuantos digitos hay, extraer cada uno de esos digitos en orden (haciendo `(num / (10 ^ digito)) % 10` donde digito = 0… numero de digitos. Lo haces en un bucle (while o for), empezando en digito=num_digitos-1, y acabando en 0.

      • Alejandro Caro says:

        No te entendí bien, pero por lo que te entendí hice esto, pero el programa, si bien no tiera error tampoco funciona.
        #include
        #include

        int main()
        {
        int num,contador=1;
        int digitoseparado = 0;
        printf(“Este programa te va a decir cuantos digitos tiene un numero. Introduce uno: “);
        scanf(“%d”,&num);

        while(num/10>0)
        {
        num=num/10;
        contador++;
        }

        for (contador=num-1;contador>=0;contador–) {
        digitoseparado = (num/(digitoseparado*10))%10;
        printf(“%i \n”,digitoseparado);
        }

        printf(“Tiene %u caracteres”,contador);
        getch();
        return 0;
        }

        • eodos says:

          Ya casi lo tienes!

          En el nuevo bucle for, tienes que inicializar una nueva variable para el bucle, para ir contando cada uno de los digitos desde el ultimo hasta el primero.
          Al final del primer bucle, contador contiene el numero de digitos. Dejemos esa variable sin tocar, ya que la necesitas al final cuando imprimes su valor.

          Si haces algo asi:

          for (int digito = contador-1; digito >= 0; digito--) {
          ...
          }

          deberia functionar. En la primera iteracion, si el numero que has leido es 12345, contador vale 5, por lo que digito = 5 – 1 = 4.
          Luego haces “(num / (10 ^ digito)) % 10” = 12345 / (10^4) % 10 = 1 % 10 = 1.
          En la segunda iteracion, digito = 3: “(num / (10 ^ digito)) % 10” = 12345 / (10^3) % 10 = 12 % 10 = 2.
          En la tercera iteracion, digito = 2: “(num / (10 ^ digito)) % 10” = 12345 / (10^2) % 10 = 123 % 10 = 3.
          En la cuarta iteracion, digito = 1: “(num / (10 ^ digito)) % 10” = 12345 / (10^1) % 10 = 1234 % 10 = 4.
          En la ultima iteracion, digito = 0: “(num / (10 ^ digito)) % 10” = 12345 / (10^0) % 10 = 12345 % 10 = 5.
          Recuerda hacer que digito sea un entero con signo (int, y no unsigned int), ya que en la ultima iteracion, cuando es 0, va a ser decrementado a -1, y entonces va a salir del bucle al cumplirse la condicion (digito < 0).

          • Alejandro Caro says:

            No, hago esto
            for (int digito = contador-1; digito >= 0; digito–) {
            digitoseparado = (num/(digitoseparado*10))%10;
            printf(“%i \n”,digitoseparado);
            }
            y se produce una división por cero.

  29. Alejandro Caro says:

    Y si hago esto
    for (int digito = contador-1; digito >= 0; digito–) {
    digitoseparado = (int)(num / (int)(pow(10,(int)digito)) % 10);
    printf(“%i \n”,digitoseparado);
    }

    printf(“Tiene %d caracteres”,contador);
    getch();
    return 0;
    }
    da 0 y al final 1

  30. Alejandro Caro says:

    me parece que num pierde el valor al salir del while ¿o me parece a mi?

    • eodos says:

      No deberia perderse ya que defines esa variable fuera del bucle, y solo la modificas dentro del while.

      • Alejandro Caro says:

        Se pierde sí. De hecho termina valiendo 0 por las operaciones que hace. Si en el programa pones un printf para que escriba el valor de num debajo del while va a dar 0. Ahí está el error de tu lógica. La variable num ya no sirve, tienes que crear otra que se le cargue el número ingresado por el usuario.

      • Alejandro Caro says:

        Quedaría así.
        #include
        #include
        #include
        #include

        int main()
        {
        int num,numeroentero,contador=1;
        int digitoseparados = 0;
        printf(“Este programa te va a decir cuantos digitos tiene un n£mero. Introduce uno: “);
        scanf(“%d”,&num);

        numeroentero=num;

        while(num/10>0)
        {
        num=num/10;
        contador++;
        }

        printf(“Tiene %i caracteres\n”,contador);

        printf(“Los caracteres separados son: “);
        for (int digito = contador-1; digito >= 0; digito–)
        {
        digitoseparados = (int)(numeroentero/(int)(pow(10,digito))) % 10;
        printf(“%i “,digitoseparados);
        }

        getch();
        return 0;
        }

  31. Alejandro Caro says:

    me sigue dando 0

  32. Rut says:

    Hola quiero saber calcular y presentar cuántas cifras tiene un determinado valor numérico introducido por teclado.

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