我想写一个用C编写的最小化程序来计算某个自然数的数字总和(数字总和定义如下:sumOfDigits(123)=6,sumOfDigits(0)=0,sumOfDigits(32013)=9等)。
到目前为止,下面的代码片段一切正常。例如,对于5100,它可以正确地返回6。但是,为什么05100(请记住前导0)会返回14?
这里发生了什么事情?
我查看了这些数字的二进制表示,但没有给我任何信息。(顺便说一下:以下代码应该在任何地方都可以运行,我想。)
#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