编写c语言程序,输入一个数字,统计这个数的各个位上的数字总共出现了几次,最后按照从小到大进行输出。(只输出出现过的数字,没有出现的数字不输出)
时间: 2024-10-25 21:09:56 浏览: 72
简单的C语言程序示例,用于统计一个非负整数中每个位上的数字出现的次数.pdf
当你编写一个 C 语言程序来完成这个任务时,你可以使用数组或哈希表来存储每个数字出现的次数,并遍历输入的每一位。以下是实现这一功能的基本步骤:
1. **定义数据结构**:创建一个大小足够存放0-9之间所有数字的数组或使用哈希表(如 `int count[10]` 或 `struct CountNode *hashTable[10];`)。
2. **读取输入**:通过 `scanf` 函数获取用户输入的一个整数。
3. **处理每一位**:
- 使用 `while` 循环和位运算(例如 `%10` 可得到十进制数的最后一位),逐位提取数字并更新对应的计数器。
4. **统计次数**:对于数组,直接累加对应位置的值;对于哈希表,可以将每个数字作为键(key),出现次数作为值(value),在遇到相同的数字时增加计数。
5. **排序和输出**:如果使用数组,可以遍历数组并在每次增加新的数字时检查是否已经存在并跳过。如果使用哈希表,你需要先将其转换为有序数组(比如用桶排序或基数排序),然后遍历输出。
6. **结束循环**:当所有的位都被处理完后,停止循环。
7. **清理内存**:如果你使用了动态分配的内存,别忘了释放。
下面是一个简单的示例代码片段,使用数组来存储计数:
```c
#include <stdio.h>
#define MAX_DIGITS 10
void countDigits(int num) {
int count[MAX_DIGITS] = {0};
while (num > 0) {
int digit = num % 10;
count[digit]++;
num /= 10;
}
// 输出出现过的数字
for (int i = 0; i < MAX_DIGITS; i++) {
if (count[i] > 0)
printf("%d appears %d times.\n", i, count[i]);
}
}
int main() {
int inputNum;
printf("Enter a number: ");
scanf("%d", &inputNum);
countDigits(inputNum);
return 0;
}
```
阅读全文