牛牛新买了一本算法书,算法书一共有n页,页码从1到n。牛牛于是想了一个算法题目:在这本算法书页码中0~9每个数字分别出现了多少次?
输入描述:
输入包括一个整数n(1 ≤ n ≤ 1,000,000,000)
输出描述:
输出包括一行10个整数,即0~9这些数字在页码中出现的次数,以空格分隔。行末无空格。
输入例子:
999
输出例子:
189 300 300 300 300 300 300 300 300 300
//参考自:牛客网用户:gs54
package page.of.statistics;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int n = sc.nextInt();
int arr[] = new int[10];
for (int i = 0; i < 10; i++) {
arr[i] = 0;
}
count(n, arr);
for (int i = 0; i < 9; i++) {
System.out.print(arr[i] + " ");
}
System.out.print(arr[9]);
}
sc.close();
}
public static void count(int n, int arr[]) {
for (int i = 1; n / i != 0; i *= 10) {
//394 i=1时,before=39 after=0 current=4;
// i=10 before=3 after=3,current=9;
int before = n / (i * 10);
int after = n % i;
int current = (n / i) % 10;
//统计当前循环0的个数
if (current == 0) {
arr[0] += (before - 1) * i + after + 1;
} else {
arr[0] += before * i;
}
//统计当前current循环1至9的个数
for (int index = 1; index < 10; index++) {
if (index < current) {
arr[index] += (1 + before) * i;
} else if (index == current) {
arr[index] += before * i + after + 1;
} else {
arr[index] += before * i;
}
}
}
}
}