Editorial for Suma de dígitos
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
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 < ba mod a = 0a mod 1 = 0a mod b = asia < b0 mod b = 0a mod b = 0siaes múltiplo deb(a + b) mod b = a mod b(a - b) mod b = a mod b(a * b) mod b = 0a mod bsiempre está entre0yb - 1siaybson 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
- Definimos y recibimos el número entero
Na analizar. - Definimos
sumacomo una variable entera, con valor inicial de0. - Iniciamos un ciclo while, que se ejecutará mientras que
nNO sea 0. - En cada iteración le sumamos a
sumael valor del último dígito. - En cada iteración desplazamos
Na 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++). - Eventualmente el ciclo se acabará y lo único que queda es imprimir la suma final.
Comments