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