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