在使用 C 语言计算带前导零的数字之和时出现奇怪的行为

3
我想写一个用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

1个回答

5

如果数字以0开头,表示使用八进制数字系统。

所以017即为十进制数:15

而05100则为十进制数:2624


4
好的,我会尽力完成这项翻译工作。下面是需要翻译的内容:@user2717860, Zaibis, http://programmers.stackexchange.com/questions/98692/where-are-octals-usefulOctal数在哪些方面有用? - David Ranieri
因为我删除了我的评论:@Alter Mann:关于这个符号的用途,那是一个有用的链接,谢谢。 - dhein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接