#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int MOD = 1e9 + 7;
using Graph = vector<vector<long long>>;
template <class T>
inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
long nCr(int n, int r) {
  long ans = 1;
  for (int i = n; i > n - r; --i) {
    ans = ans * i;
  }
  for (int i = 1; i < r + 1; ++i) {
    ans = ans / i;
  }
  return ans;
}
int main() {
  string n;
  long long x;
  cin >> n;
  cin >> x;
  long long size = n.size();
  long long ans = 0;
  long long dp[size + 1][2][2][x + 1];
  memset(dp, 0, sizeof(dp));
  dp[0][0][0][0] = 1;
  for (int i = 0; i < size; i++) {
    const int D = (int)n.at(i) - 48;
    for (int j = 0; j < 2; j++) {
      for (int y = 0; y < 2; y++) {
        for (int k = 0; k < x; k++) {
          for (int d = 0; d <= (j ? 9 : D); ++d) {
            if (y == 0) {
              if (d != 0) {
                dp[i + 1][j || (d < D)][y + 1][k + 1] += dp[i][j][y][k];
              } else {
                dp[i + 1][j || (d < D)][y][k] += dp[i][j][y][k];
              }
            } else {
              if (d != 0) {
                dp[i + 1][j || (d < D)][y][k + 1] += dp[i][j][y][k];
              } else {
                dp[i + 1][j || (d < D)][y][k] += dp[i][j][y][k];
              }
            }
          }
        }
      }
    }
  }
  cout << dp[size][0][1][x] + dp[size][1][1][x] << endl;
}
