2013-08-26 32 views
2

我只想在C中編寫一個簡約程序來計算某個自然數的位數之和(位數的總和定義如下:sumOfDigits(123)= 6,sumOfDigits(0)= 0,sumOfDigits(32013)= 9等等)。計算C中奇怪的行爲時,用前導零計算數字的總和

到目前爲止,下面的代碼片段都可以。例如,對於5100,它正確地提供了6。但是,爲什麼14交付05100(記得領先的0)?

這是怎麼回事?

我看了一下數字的二進制表示,但沒有給我提供任何信息。 (順便說一句:下面的代碼應該運行在任何地方,我猜。)

#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表示八進制。 :-)等等:5100_8 == 2624_10

回答

5

前導0表示您要使用八進制數字系統。

所以017即是十進制:15

而且你的05100是十進制:2624

+4

@ user2717860,Zaibis,http://programmers.stackexchange.com/questions/98692/where-are-八進制 - 有用 –

+0

因爲我刪除了我的評論:@Alter Mann:這是一個有用的鏈接,關於這個符號是有用的,謝謝。 – dhein