int countDigit(int n, int d)
{
    if (n > 0) {
        return (n % 10 == d ? 1 : 0) + countDigit(n / 10, d);
    }

    return 0;
}
Example #2
0
	int smallestNumber(int N) {
		if (N == 1) return 1;
	
		memset(count, 0, sizeof(count));
		
		count[2] = countDigit(N, 2);
		count[3] = countDigit(N, 3);
		count[5] = countDigit(N, 5);
		count[7] = countDigit(N, 7);
		
		if (!checkValid(N)) return -1;
		
		int res = 0;
		res += count[2]/3; count[2] %= 3;
		if (count[2] == 2) { res ++; count[2] = 0; }
		res += count[3]/2; count[3] %= 2;
		res += (count[3] | count[2]);
		res += count[5] + count[7];
		return res;
	}
Example #3
0
int solve(int l, int r)
{
	if(l == r) return 1;
	if(f[l][r] != -1) return f[l][r];
	f[l][r] = 0x3f3f3f3f;
	for(int k = l; k < r; k++) // [l, k] [k+1, r]
	{
		int tmp = solve(l, k) + solve(k+1, r);
		if((r-l+1) % (k-l+1) == 0 && check(l, r, k))
			tmp = std::min(tmp,	countDigit((r-l+1)/(k-l+1)) + solve(l, k) + 2);
		f[l][r] = std::min(f[l][r], tmp);
	}
	//printf("%d %d : %d\n", l, r, f[l][r]);
	return f[l][r];
}
Example #4
0
void printNum(int n){
	int digitCount = countDigit(n);
	int a[digitCount];	//to store individual digit
	
	for(int i=digitCount-1; i>=0; i--){
		//extract last digit and store in array
		a[i] = n%10;

		//remove last digit
		n /= 10;
		
	}

	//print number
	for(int i=digitCount-1; i>=0; i--)
		printf("%i ",a[i]);
}
Example #5
0
int main(void)
{
  /*Variables*/
  int num = 0, N = 0;
  
  /*Scan user input*/
  scanf("%d %d", &num, &N);

  /*Negate num if it is negative*/
  if(num < 0)
    num = -num;
  
  /*Print output
   *If num has lesser digit that N, return 0. 
   *Else, find number at Nth position
   */
  printf("%d\n", countDigit(num) < N ? 0 : findNum(num, N));
  
  return 0;
}
int main(int argc, char * argv[])
{
    printf("%d\n", countDigit(1007, 7));
    return 0;
}