写在最前:欢迎批评,欢迎任意地方的指正,用你们的优秀的java代码砸死我吧!!
问题——————
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
解题思路:
非常简单的题,统计键是0到9十个数字,顺理成章的就可以用一个长度为10的数组来存储,省去了对数字的排序,并且也不用查找,非常方便,直接通过遍历字符串解决即可,不需要每次除10取余。
package not.die.in.here;
//满分15
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _1021_NumCheck {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
char[] buf = bf.readLine().toCharArray();//放字符数组中遍历查看
int[] num = new int[10];
for(int i=0;i<buf.length;i++) {
num[buf[i]-48]++;//对应字符减去48就是int值,三个重要的ascii码值分别是48,65和97,对应0,A和a
}
for(int i=0;i<10;i++) {
if(num[i]!=0)
System.out.println(i+":"+num[i]);//如果不是零就输出对应数字的数量
}
}
}
提交截图:

本文介绍了一种高效的方法,用于统计一个大整数中各个个位数字出现的频率。通过将整数转换为字符数组,利用ASCII码特性,使用长度为10的数组存储每种个位数字的出现次数,从而避免了排序和查找的复杂操作,实现了一次遍历即可完成统计。
322

被折叠的 条评论
为什么被折叠?



