2013-08-26 2 views
2

난 자연수의 숫자 합계를 계산하기 위해 C로 최소의 프로그램을 작성하려고합니다 (숫자의 합계는 다음과 같이 정의됩니다 : sumOfDigits (123) = 6, sumOfDigits (0) = 0, sumOfDigits (32013) = 9 등).선행 0으로 자릿수 합계를 계산할 때 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; 
} 

편집 : Zaibis 진술으로 .... 선도적 인 0은 8 진수를 의미한다. :-) 이렇게 : 5100_8 == 2624_10

답변

5

앞에 0을 쓰면 8 진수 시스템을 사용하려는 것입니다. 15

그리고 당신의 05,100 소수점 다음과 같습니다 :

그래서 017 즉, 소수점 될 2624

+4

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

+0

내 코멘트를 삭제했기 때문에 @Alter Mann :이 표기법이 유용한 것에 대한 유용한 링크입니다. 감사합니다. – dhein

관련 문제