Principiante · Dígitos

Suma de los dígitos

Lee un entero positivo e imprime la suma de sus dígitos: 12345 → 1+2+3+4+5 = 15. Tercera aparición del patrón de trocear — ya debería empezar a resultarte familiar.

En una fraseSuma las cifras con sum += n % 10 y n /= 10 hasta que n sea 0: el patrón de trocear dígitos que convierte cualquier problema de cifras en un bucle.

El problema

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

Salida: la suma de los dígitos de N.

Ejemplos:

EntradaSalida
1234515
10001

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, una vez más

n % 10 saca el último dígito, n / 10 lo corta. En Contar dígitos contabas cortes; en Invertir un número los recolocabas. Aquí solo sumas cada dígito a un acumulador.

Pista 2 — el final del bucle

while (n > 0) — todo positivo llega a 0 tras suficientes divisiones por 10. Cuando llega, el acumulador tiene la respuesta.

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

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

Ya tienes el kit completo de dígitos: contar, sumar, invertir. Buen remix: el producto de los dígitos, o «¿aparece el 7?» (un if dentro del bucle). Lectura relacionada: división entera.

Análisis profundo

Por qué funciona

El mismo arranque de dígitos con otro acumulador. Reconocer que un problema nuevo es un bucle viejo con otro cuerpo es la habilidad que entrena toda esta sección.

El coste

O(d), d ≤ 10 para int. El número de vueltas depende de los dígitos, no del tamaño del número.

Dónde falla

  • Olvidar la división (quedarse en n % 10) produce un bucle infinito que congela la pestaña.
  • -123 % 10 es -3 en C++, así que la suma de un negativo sale negativa. Aplica abs antes.

Siguiente paso

Guarda los dígitos y móntalos al revés: Invertir un número.

Dos cosas para recordar

  • El módulo de un negativo es negativo en C++: abs() primero.
  • Problema nuevo, bucle viejo: solo cambia el cuerpo.
🐞 Esta versión falla: ábrela y pruébala

Usa / donde hacía falta %

#include <iostream>
using namespace std;

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