思路:取每位 记数组
错误写法:直接存数组
#include<cstdio>
const long long maxn = 1010;
int main(){
long long n,a[maxn]={0},temp,length;
scanf("%lld",&n);
while(n){
temp=n%10;
n/=10;
a[temp]++;
length++;
}
for(int i=0;i<maxn;i++){
if(a[i]!=0) {
printf("%lld:",i);
printf("%lld\n",a[i]);
}
}
return 0;
}
数太大就存不进去了。。。
正确方法: 读字符串 字符型数字转为整形的数字。
#include<cstdio>
#include<cstring>
int main(){
char str[1010];
gets(str);
int len = strlen(str);//别忘了声明
int a[10]={0};
for(int i=0;i<len;i++){
a[str[i]-'0']++;
}
for(int i=0;i<10;i++){
if(a[i]){
printf("%d:",i);
printf("%d\n",a[i]);
}
}
return 0;
}