题目来源:PAT 乙级练习题 —— 1021 个位数统计 (15 分)
题目详情
给定一个k位整数,
N
=
d
k
−
1
1
0
k
−
1
+
.
.
.
+
d
1
1
0
1
+
d
0
(
0
≤
d
i
≤
9
,
i
=
0
,
.
.
.
,
k
−
1
,
d
k
−
1
>
0
)
N = d_{k-1}10^{k-1} + ... + d_110^1 + d_0 (0 \leq d_i \leq 9,i = 0,...,k-1,d_{k-1} > 0)
N=dk−110k−1+...+d1101+d0(0≤di≤9,i=0,...,k−1,dk−1>0),请编写程序统计每种不同的个数数字出现的次数。例如:给定N = 10031,则有2个0,3个1,和1个3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数
N
。
输出格式:
对 N 中每一种不同的个位数字,以
D:M
的格式在一行中输出该位数字D
及其在N
中出现的次数M
。要求按D
的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
解题思路
- 对于一个输入的数字,通过字符串获取输入,解决数字长度过大的问题
- 创建一个整数数组用于记录其数字出现的次数
- 从左到右遍历这个整数字符串,如果出现相对应的数字,则次数加一
- 输出时,要注意两点:一个是要对
D
进行升序输出,二个是要注意不存在的数字次数无需输出
代码实现
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int[] count = new int[10];
for(int i = 0 ; i < str.length() ; i++) {
int num = str.charAt(i) - '0';
switch (num) {
case 0 : count[0]++; break;
case 1 : count[1]++; break;
case 2 : count[2]++; break;
case 3 : count[3]++; break;
case 4 : count[4]++; break;
case 5 : count[5]++; break;
case 6 : count[6]++; break;
case 7 : count[7]++; break;
case 8 : count[8]++; break;
case 9 : count[9]++; break;
}
}
for(int i = 0 ; i < count.length ; i++) {
if(count[i] != 0) {
System.out.println(i + ":" + count[i]);
}
}
}
}