2013-08-26 1 views
2

Я просто хотел написать минимальную программу на 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

ответ

5

Ведущий 0 означает, что вы хотите использовать восьмеричную систему цифр.

Так +017 т.е. будет десятичный: 15

И ваш 05100 будет десятичным: 2624

+4

@ user2717860, Zaibis, http://programmers.stackexchange.com/questions/98692/where-are- octals-useful –

+0

Потому что я удалил свой комментарий: @Alter Mann: это полезная ссылка о том, для чего это обозначение полезно, спасибо. – dhein