我只是想用C语言编写一个简约程序来计算某个自然数的总和(数字的总和定义如下:sumOfDigits(123)= 6,sumOfDigits(0)= 0,sumOfDigits(32013)= 9 , 等等)。

到目前为止,使用以下代码段可以正常进行。例如,对于5100,它可以正确交付6。但是,为什么为05100交付14个(记住前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

最佳答案

前导0表示您要使用八进制数字系统。

所以017即是十进制:15

而您的05100将是十进制:2624

10-06 04:23