3

我只是想用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

4

1 回答 1

5

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

所以 017 即十进制:15

你的 05100 将是十进制:2624

于 2013-08-26T11:34:32.783 回答