Editorial for Suma de dígitos


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Author: leosangue

Para este problema, necesitamos determinar una forma eficiente para saber el último dígito de un número entero. Para eso usamos el operador módulo: %.

La operación módulo sirve para obtener el residuo de una división de enteros. Ejemplos:

  • 10%3=1: 10 cabe 3 veces en 3, y sobra 1.
  • 17%6=5: 17 cabe 2 veces en 6, y sobran 5.
  • 25%5=0: 25 cabe 5 veces en 5, y sobran 0.

Ese número que sobra se le llama residuo.

Reglas generales de módulo

  • a mod b < b
  • a mod a = 0
  • a mod 1 = 0
  • a mod b = a si a < b
  • 0 mod b = 0
  • a mod b = 0 si a es múltiplo de b
  • (a + b) mod b = a mod b
  • (a - b) mod b = a mod b
  • (a * b) mod b = 0
  • a mod b siempre está entre 0 y b - 1 si a y b son positivos.

Último dígito de un número entero

Sabiendo esto, hay una forma muy fácil de conocer el último digito de un número entero, y es haciendole mod 10. El residuo de la división de cualquier número entero entre 10 es el último dígito, probemos:

  • 23 mod 10 = 3: 23 cabe 2 veces en 10 y sobran 3.
  • 67 mod 10 = 7: 67 cabe 6 veces en 10 y sobran 7.
  • 964386 mod 10 = 6: 964386 cabe 96438 veces en 10, y sobran 6.

Asimismo, en C++, cada vez que dividimos un entero entre 10, "desplazamos el número hacia la derecha", eliminando el último dígito. Sabiendo esto, podemos diseñar un ciclo que agregue a la suma el valor del último dígito y lo elimine, así hasta que nuestro número sea 0.

Código de ejemplo

#include<iostream>
using namespace std;

int main(){
    long long int n; cin>>n; //1
    int suma=0; //2 
    while(n!=0){ //3
        suma = suma + n%10; //4
        n = n/10; //5
    }
    cout<<suma; //6
    return 0;
}

Explicación del código

  1. Definimos y recibimos el número entero N a analizar.
  2. Definimos suma como una variable entera, con valor inicial de 0.
  3. Iniciamos un ciclo while, que se ejecutará mientras que n NO sea 0.
  4. En cada iteración le sumamos a suma el valor del último dígito.
  5. En cada iteración desplazamos N a la derecha, es decir, lo dividimos entre 10 para quitarle el último dígito. Eventualmente el número será de un solo dígito, y cualquier número de un dígito entre 10, es 0 (en C++).
  6. Eventualmente el ciclo se acabará y lo único que queda es imprimir la suma final.

Comments

There are no comments at the moment.