Principiante · Bucles + matemática entera

Contar dígitos

Lee un entero positivo e imprime cuántos dígitos tiene. Presenta el truco numérico más útil del nivel principiante: trocear dígitos con / 10 y % 10.

En una fraseCuenta las cifras de N dividiendo por 10 en un while hasta que N llegue a 0: la misma forma de bucle que reutilizan todos los problemas de dígitos.

El problema

Entrada: un entero positivo N (1 ≤ N ≤ 10⁹).

Salida: cuántos dígitos tiene N.

Ejemplos:

EntradaSalida
123455
71

Tu solución

main.cpp — tu solución
Entrada personalizada para «Ejecutar mi entrada»

La corrección corre en tu navegador contra pruebas ocultas. Un bucle infinito se corta a los 3 segundos — aun así, asegúrate de que todo bucle tenga salida. Tu código se guarda solo mientras escribes.

¿Atascado? Pistas

Pista 1 — el patrón de trocear

n % 10 da el último dígito; n / 10 lo elimina (¡división entera! mira por qué 7/2 es 3). Así 12345 pasa a 1234, luego 123… hasta llegar a 0. Cuenta cuántos cortes fueron.

Pista 2 — elegir el bucle

No sabes de antemano cuántas iteraciones harán falta — ese es trabajo del while: while (n > 0) { count++; n /= 10; }. Como en la guía de for vs while: número de vueltas desconocido → while.

Solución (¡inténtalo primero!)
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int count = 0;
    while (n > 0) {
        count++;
        n /= 10;
    }
    cout << count << endl;
    return 0;
}

Este patrón de trocear es la mitad del siguiente problema también — Suma de los dígitos usa los mismos dos movimientos en otro orden. Así piensa un algoritmo: los patrones se recombinan.

Análisis profundo

Por qué funciona

Dividir entre 10 arranca el último dígito y el módulo 10 lo lee. Ese par / 10 y % 10 es toda la base de la manipulación de dígitos, y aparece en la mitad de los problemas del sitio.

El coste

O(d), con d = número de dígitos. Como mucho 10 para un int, así que en la práctica es constante.

Dónde falla

  • while (n > 0) devuelve 0 dígitos para n = 0. El cero necesita su propia respuesta.
  • log10(n) + 1 parece elegante y falla en 0 y en el redondeo de coma flotante en las potencias exactas de diez.

Siguiente paso

Suma los dígitos que vas arrancando: Suma de los dígitos.

Dos cosas para recordar

  • / 10 quita el último dígito; % 10 lo lee.
  • El cero es la entrada que rompe todo bucle de dígitos.
🐞 Esta versión falla: ábrela y pruébala

while (n >= 10) se para un dígito antes

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int count = 0;
    while (n >= 10) {
        n /= 10;
        count++;
    }
    cout << count << endl;
    return 0;
}