#include <stdio.h>
#include <string.h>
int main() {
char N[1001]; // 用于存储最多 1000 位的数字
int count[10] = {0}; // 用于统计各个位数字的出现次数
// 输入数字 N,最多 1000 位
scanf("%s", N);
// 统计数字出现次数
int len = strlen(N); // 获取数字的长度
for (int i = 0; i < len; i++) {
count[N[i] - '0']++; // 将字符转换为数字并计数
}
// 输出结果,按照数字升序输出
for (int i = 0; i < 10; i++) {
if (count[i] > 0) {
printf("%d:%d\n", i, count[i]); // 输出数字 i 及其出现次数
}
}
return 0;
}
问题分析:
- 大数字处理问题:
long long
最大能表示 64 位整数,即范围是 -2^63
到 2^63 - 1
,大约是 -9223372036854775808
到 9223372036854775807
,如果数字超出这个范围,long long
类型就无法正确表示了。 - 负数问题:如果输入的是负数,
long long
也会导致一些问题。虽然在你的代码中,程序没有显式处理负数,但如果输入了负数,temp = n
会把负号处理为一个数字,这可能导致错误的结果。
解决方案:
- 处理大数字:对于大于
long long
范围的数字,我们应该将数字处理为字符串,而不是直接当作 long long
类型来处理。
