Comportamiento extraño en C al calcular la suma de dígitos con ceros iniciales
Solo quería escribir un programa minimalista en C para calcular la suma de dígitos de algún número natural (la suma de dígitos se define de la siguiente manera: sumOfDigits (123) = 6, sumOfDigits (0) = 0, sumOfDigits (32013) = 9 , y así).
Hasta ahora, todo está bien con el siguiente fragmento de código. Por ejemplo, para 5100 entrega 6, correctamente. Pero, ¿por qué se entregan 14 para 05100 (recuerde el 0 principal)?
¿Que está pasando aqui?
Eché un vistazo a la representación binaria de los números, pero eso no me dio ninguna información. (Por cierto: el siguiente código debería funcionar en cualquier lugar, supongo).
#include <stdio.h>
unsigned int sumOfDigits(unsigned int n) {
int retval = 0;
while (n > 0) {
retval += n % 10;
n/=10;
}
return retval;
}
int main() {
printf("OK: %u\n", sumOfDigits(5100u));
printf("WTF: %u", sumOfDigits(05100u));
return 0;
}
EDITAR: Como Zaibis declaró ... un 0 inicial significa notación octal. :-) y así: 5100_8 == 2624_10