题解 | [ZJOI2010]COUNT 数字计数
[ZJOI2010]COUNT 数字计数
https://www.nowcoder.com/practice/bb1a9efa244a4c9296390686ef17b024
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { static long[] count(long n) { long[] c = new long[10]; long pos = 1; while (pos <= n) { long preNum = n / (pos * 10); //当前位之前的数字 long curNum = (n % (pos * 10)) / pos; //当前位上的数字 long bacNum = n % pos; //当前位之后的数字 for (int i = 0; i <= 9; i++) { c[i] += preNum * pos; //举例 5在0~265的0~~200部分的十位中,出现了2*10次(50~59与150~159共20次) if (curNum > i) c[i] += pos; //举例 5在0~65的十位出现了10次 else if (curNum == i) c[i] += bacNum + 1; //举例 6在0~65的十位出现了5+1次 if (i == 0) c[i] -= pos; //如果当前位数字是0,在c[i]+=preNum;计算时,存在pom种以0开始的情况,需要去掉 } pos *= 10; } return c; } public static void main(String[] args) { Scanner in = new Scanner(System.in); long a = in.nextLong(); long b = in.nextLong(); long[] ac = count(a - 1); long[] bc = count(b); for (int i = 0; i <= 9; i++) { System.out.print(bc[i] - ac[i]); if (i != 9) System.out.print(" "); } } }