题目背景
Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。
题目描述
Bessie的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码(0..9):每一个数码在计数的过程中出现过多少次?
给出两个整数M 和N (1 ≤M ≤N ≤2,000,000,000 以及N-M ≤500,000),求每一个数码出现了多少次。
例如考虑序列129--137: 129, 130, 131, 132, 133, 134, 135, 136, 137。统计后发现:
0出现了1次,1出现了10次,2出现了2次,3出现了9次,4出现了1次,5出现了1次,
6出现了1次,7出现了1次,8出现了0次,9出现了1次。
输入输出格式
输入格式:
第1行: 两个用空格分开的整数M 和N
输出格式:
第1行: 十个用空格分开的整数,分别表示数码(0..9)在序列中出现的次数。
输入输出样例
输入样例#1: 复制
129 137
输出样例#1: 复制
1 10 2 9 1 1 1 1 0 1
思路:
1、
/ 就是除号嘛。但是它和我们平时的除法不太一样。它在处理int的时候,由于只能存整数,所以除完后存的数会丢掉小数。(注意:不是四舍五入)
例如:123/4=30(int型)
那么我们可以利用这个特性。我们如果把一个int型的数/10,它就丢掉了它的最后一位
例如:236/10=23(最后一位没了)
2、
% 求余数,也称作模。就是求一个数除另外一个数的余数。
例如:123/4=30···3。那么123%4=3。
这个东西也是一个很好用的东西。和上面类似,我们可以把1个数%10,求他的最后一位。
例如:236%10=6 (最后一位)
综合
有了上面这两个方法,我么就可以这样做:取一个数的最后一位(%10),再把它的最后一位扔掉,记录。然后再取新的最后一位,再把它扔掉,记录。循环直到这个数变成0(无法再取)
画个表就是这样的:
numa
1234-----取4,记录,扔掉4。
123-------取3,记录,扔掉3。
12---------取2,记录,扔掉2。
1-----------取1,记录,扔掉1。
0(结束)
这是处理一个数的过程,把实现这个过程的程序放进枚举循环里就行了。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int[] js=new int[10];
for(int i=a;i<=b;i++){
for(int j=i;j>0;j/=10) {
js[j % 10]++;
}
}
for(int i=0;i<=9;i++){
System.out.print(js[i]+" ");
}
}
}