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: Wrong Answer)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String S = sc.next();
        char[] c = S.toCharArray();
        int K = sc.nextInt();

        int ans = 0;
        for (int i=0;i<c.length;i++) {
            if (K==1) {
                int a = 9;
                if (i==0) {
                    a = (int)c[i]-48;
                }
                ans += a;
                continue;
            }
            for (int j=i+1;j<c.length;j++) {
                if (K==2) {
                    int a = 9;
                    int b = 9;
                    if (i==0) {
                        a = (int)c[i]-48;
                        if (j==1) {
                            b = (int)c[j]-48;
                        }
                    }
                    ans += a*b;
                    continue;
                }
                for (int k=j+1;k<c.length;k++) {
                    if (K==3) {
                        int a = 9;
                        int b = 9;
                        int d = 9;
                        if (i==0) {
                            a = (int)c[i]-48;
                            if (j==1) {
                                b = (int)c[j]-48;
                                if (k==2) {
                                    d = (int)c[k]-48;
                                }
                            }
                        }
                        ans += a*b*d;
                        continue;
                    }
                }
            }
        }
        System.out.println(ans);
    }
}