Problem:
Score : 500 points

Problem Statement

Find the number of integers between 1 and N (inclusive) that contains exactly K non-zero digits when written in base ten.

Constraints

1 \leq N < 10^{100}

1 \leq K \leq 3

Input

Input is given from Standard Input in the following format:

N
K

Output

Print the count.

Sample Input 1

100
1

Sample Output 1

19

The following 19 integers satisfy the condition:

1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100

Sample Input 2

25
2

Sample Output 2

14

The following 14 integers satisfy the condition:

11,12,13,14,15,16,17,18,19,21,22,23,24,25

Sample Input 3

314159
2

Sample Output 3

937

Sample Input 4

9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
3

Sample Output 4

117879300

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Runtime Error)



import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);

		long n = scan.nextLong();
		int k = scan.nextInt();
		scan.close();

//		System.out.println(n + " " + k);

		long ans = 0;
		for (long num = 1; num <= n; num++) {
			boolean flg = false;
			String numStr = Long.toBinaryString(num);

			System.out.println("numStr " + num + " : " + numStr);

			int index = 0;
			for (int kCnt = 0; kCnt < k; kCnt++) {
				int indexOf = numStr.indexOf("1", index);
				System.out.println(kCnt + " " + index);
				if (indexOf < 0) {
					flg = true;
					break;
				}
				index = indexOf + 1;
			}

			if (numStr.indexOf("1", index) > 0) {
				flg = true;
			}


			if (!flg) {
				ans++;
			}
		}

		System.out.println(ans);
	}

}