El problema con el número que tu le has puesto, es que el 0031416 lo toma como un octal, es decir, un numero en base 8. (Por ejemplo, prueba con 00981 y el compilador debería avisarte de ello).
En principio la solución debería ser esto:
El código lo que hace es, una vez le introduces el número (ahora si funciona con cifras como 0031416):
mientras num > 0
A sum le añade el resto de dividir entre 10 num (345%10 = 5) (Num aqui no se ha modificado)
Dividimos num entre 10 (345/10=34 (recordemos que estamos hablando de división de enteros))
En principio la solución debería ser esto:
Código (cpp) [Seleccionar]
int main(){
int num;
int sum=0;
cin >> num;
while(num>0){
sum+=num%10;
// esto era para pruebas cout <<"suM:" <<sum<< endl;
num=num/10;
// esto era para pruebas cout << "num:" << num << endl;
}
cout << sum << endl;
return 0;}
El código lo que hace es, una vez le introduces el número (ahora si funciona con cifras como 0031416):
mientras num > 0
A sum le añade el resto de dividir entre 10 num (345%10 = 5) (Num aqui no se ha modificado)
Dividimos num entre 10 (345/10=34 (recordemos que estamos hablando de división de enteros))