week4-一维数组数码个数
目录
week4-[一维数组]数码个数
week4-[一维数组]数码个数
题目描述
给定若干个正整数,请求出这些正整数中,数码 0,1,2,…,90,1,2,\ldots,90,1,2,…,9 分别出现了多少次。
输入格式
输入只有一行,包括若干个正整数,以 000 作为结束标志。
输出格式
输出只有一行,包括 101010 个整数,分别表示数码 0,1,2,…,90,1,2,\ldots,90,1,2,…,9 在输入正整数中的出现次数。
样例 #1
样例输入 #1
546 2120 549 0
样例输出 #1
1 1 2 0 2 2 1 0 0 1
样例 #2
样例输入 #2
612 1354 19 7 98 395 0
样例输出 #2
0 3 1 2 1 2 1 1 1 3
样例 #3
样例输入 #3
1 22 333 4444 55555 6666 777 88 9 0
样例输出 #3
0 1 2 3 4 5 4 3 2 1
提示
数据范围
对于所有输入数据,每个正整数不超过 10910^9109 ,正整数的数量不超过 200200200 个。
🔎 解题思路
- 我们需要统计每个数码(digit
0~9
)在所有输入的正整数中出现的次数。 - 输入是以
0
作为结束标志的,所以读到0
就停止。 - 对每个数进行分解:不断取
num % 10
得到最后一位数字,然后num /= 10
去掉最后一位。 - 每得到一个数码,就把对应的计数器
cnt[digit]++
。 - 所有数处理完后,输出
cnt[0]
到cnt[9]
。
📝 代码实现(C++)
#include <iostream>
using namespace std;
int main() {
int cnt[10] = {0}; // 统计0~9出现次数
long long num;
while (cin >> num) {
if (num == 0) break; // 遇到结束标志退出
while (num > 0) {
int digit = num % 10;
cnt[digit]++;
num /= 10;
}
}
for (int i = 0; i < 10; i++) {
cout << cnt[i];
if (i < 9) cout << " ";
}
cout << endl;
return 0;
}