C语言 个位数统计一直有一种情况不对

img

img


一直有一种不对
C语言


#include 

int main() {
    int m = 0, i, x, y;
    int n;
    int a[10] = {0};

    scanf("%d", &n);
    y = n;

    do {
        y = y / 10;
        m++;
    } while (y != 0);

    for (i = 0; i < m; i++) {
        x = n % 10;
        a[x]++;
        n = n / 10;
    }

    for (i = 0; i < 10; i++) {
        if (a[i] > 0) {
            printf("%d:%d\n", i, a[i]);
        }
    }

    return 0;
}

我让chatgpt生成的正确答案,

#include 

int main() {
    char num[1001];
    int digit[10] = {0};  // 统计每个数字的出现次数

    scanf("%s", num);

    for (int i = 0; num[i] != '\0'; i++) {
        digit[num[i] - '0']++;
    }

    for (int i = 0; i < 10; i++) {
        if (digit[i] > 0) {
            printf("%d:%d\n", i, digit[i]);
        }
    }

    return 0;
}
这个就没问题

int a[10] = {0};
你以为这段代码是把10个元素全部设置为0,其实只是把第一个元素设置为0
其余都没有初始化

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^