给定一个 k 位整数,请编写程序统计每种不同的个位数字出现的次数。不明白代码哪里有问题。

问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图
#include<stdio.h>
int main()
{
    int x,x1,a[10],i,n=0;
    scanf("%d",&x);
    for(i=0;i<10;i++)
    a[i]=0;x1=x;
    while(x1>=1)
    {
        x1/=10;
        n++;
    }x1=x;
    for(i=0;i<n;i++)
    {
        if(x1%10==0)a[0]++;
        if(x1%10==1)a[1]++;
        if(x1%10==2)a[2]++;
        if(x1%10==3)a[3]++;
        if(x1%10==4)a[4]++;
        if(x1%10==5)a[5]++;
        if(x1%10==6)a[6]++;
        if(x1%10==7)a[7]++;  
        if(x1%10==8)a[8]++;  
        if(x1%10==9)a[9]++;
        x1/=10;                                                                              
    }       
    for(i=0;i<10;i++)
    {
        if(a[i]!=0)
        printf("%d:%d\n",i,a[i]); 
    }
}

运行结果及报错内容

img

注意题目数值范围:不超过1000位正整数,用int肯定不能表示所有的输入数据

#include <stdio.h>

#define N 1000

int main()
{
    char a[N];
    int c[10] = {};
    scanf("%s", a);
    const char *p = a;
    while (*p)
        c[*p++ - '0']++;
    for (int i = 0; i < 10; i++)
        if (c[i] > 0)
            printf("%d:%d\n", i, c[i]);
    return 0;
}