我只想在C中编写一个简约程序来计算某个自然数的位数之和(数字之和定义如下:sumOfDigits(123)= 6,sumOfDigits(0)= 0,sumOfDigits(32013) )= 9,依此类推。)
到目前为止,使用以下代码片段一切正常。例如,对于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
答案 0 :(得分:5)
前导0表示您想使用八进制数字系统。
所以017即小数:15
你的05100将是十进制:2624