Я просто хотел написать минимальную программу на C для вычисления суммы цифр некоторого натурального числа (сумма цифр определяется следующим образом: sumOfDigits (123) = 6, sumOfDigits (0) = 0, sumOfDigits (32013) = 9 и т. Д.).Странное поведение в C при вычислении суммы цифр с ведущими нулями
До сих пор все было в порядке со следующим фрагментом кода. Например, для 5100 он обеспечивает 6, правильно. Но, почему 14 доставлено на 05100 (помните ведущий 0)?
Что здесь происходит?
Я посмотрел на двоичное представление чисел, но это не дало мне никакой информации. (BTW: Следующий код должен работать в любом месте, я думаю.)
#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;
}
EDIT: Как указано Zaibis .... ведущий 0 означает восьмеричную систему счисления. :-) и так: 5100_8 == 2624_10
@ user2717860, Zaibis, http://programmers.stackexchange.com/questions/98692/where-are- octals-useful –
Потому что я удалил свой комментарий: @Alter Mann: это полезная ссылка о том, для чего это обозначение полезно, спасибо. – dhein