Given a number n, find count of all numbers from 1 to n that have 4 as a digit.

**Examples : **

Input: n = 5 Output: 1 Only 4 has '4' as digit Input: n = 50 Output: 14 Input: n = 328 Output: 60

This problem is mainly a variation of previous article on Compute sum of digits in all numbers from 1 to n.

**Naive Solution:**

A naive solution is to go through every number x from 1 to n, and check if x has 4. To check if x has or not, we can traverse all digits of x. Below is the implementation of above idea :

## C++

`// A Simple C++ program to compute sum of digits in numbers from 1 to n ` `#include<iostream> ` `using` `namespace` `std; ` ` ` `bool` `has4(` `int` `x); ` ` ` `// Returns sum of all digits in numbers from 1 to n ` `int` `countNumbersWith4(` `int` `n) ` `{ ` ` ` `int` `result = 0; ` `// initialize result ` ` ` ` ` `// One by one compute sum of digits in every number from ` ` ` `// 1 to n ` ` ` `for` `(` `int` `x=1; x<=n; x++) ` ` ` `result += has4(x)? 1 : 0; ` ` ` ` ` `return` `result; ` `} ` ` ` `// A utility function to compute sum of digits in a ` `// given number x ` `bool` `has4(` `int` `x) ` `{ ` ` ` `while` `(x != 0) ` ` ` `{ ` ` ` `if` `(x%10 == 4) ` ` ` `return` `true` `; ` ` ` `x = x /10; ` ` ` `} ` ` ` `return` `false` `; ` `} ` ` ` `// Driver Program ` `int` `main() ` `{ ` ` ` `int` `n = 328; ` ` ` `cout << ` `"Count of numbers from 1 to "` `<< n ` ` ` `<< ` `" that have 4 as a a digit is "` ` ` `<< countNumbersWith4(n) << endl; ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to compute sum of ` `// digits in numbers from 1 to n ` `import` `java.io.*; ` ` ` `class` `GFG { ` ` ` ` ` `// Returns sum of all digits ` ` ` `// in numbers from 1 to n ` ` ` `static` `int` `countNumbersWith4(` `int` `n) ` ` ` `{ ` ` ` `// initialize result ` ` ` `int` `result = ` `0` `; ` ` ` ` ` `// One by one compute sum of digits ` ` ` `// in every number from 1 to n ` ` ` `for` `(` `int` `x=` `1` `; x<=n; x++) ` ` ` `result += has4(x)? ` `1` `: ` `0` `; ` ` ` ` ` `return` `result; ` ` ` `} ` ` ` ` ` `// A utility function to compute sum ` ` ` `// of digits in a given number x ` ` ` `static` `boolean` `has4(` `int` `x) ` ` ` `{ ` ` ` `while` `(x != ` `0` `) ` ` ` `{ ` ` ` `if` `(x%` `10` `== ` `4` `) ` ` ` `return` `true` `; ` ` ` `x = x /` `10` `; ` ` ` `} ` ` ` `return` `false` `; ` ` ` `} ` ` ` ` ` `// Driver Program ` ` ` `public` `static` `void` `main(String args[]) ` ` ` `{ ` ` ` `int` `n = ` `328` `; ` ` ` `System.out.println(` `"Count of numbers from 1 to "` ` ` `+ ` `" that have 4 as a a digit is "` ` ` `+ countNumbersWith4(n)) ; ` ` ` `} ` `} ` ` ` `// This code is contributed by Nikita Tiwari. ` |

*chevron_right*

*filter_none*

## Python

`# A Simple Python 3 program to compute ` `# sum of digits in numbers from 1 to n ` ` ` `# Returns sum of all digits in numbers from 1 to n ` `def` `countNumbersWith4(n) : ` ` ` `result ` `=` `0` `# initialize result ` ` ` ` ` `# One by one compute sum of digits ` ` ` `# in every number from 1 to n ` ` ` `for` `x ` `in` `range` `(` `1` `, n ` `+` `1` `) : ` ` ` `if` `(has4(x) ` `=` `=` `True` `) : ` ` ` `result ` `=` `result ` `+` `1` ` ` ` ` `return` `result ` ` ` `# A utility function to compute sum ` `# of digits in a given number x ` `def` `has4(x) : ` ` ` `while` `(x !` `=` `0` `) : ` ` ` `if` `(x` `%` `10` `=` `=` `4` `) : ` ` ` `return` `True` ` ` `x ` `=` `x ` `/` `/` `10` ` ` ` ` `return` `False` ` ` `# Driver Program ` `n ` `=` `328` `print` `(` `"Count of numbers from 1 to "` `, n, ` ` ` `" that have 4 as a a digit is "` `, ` ` ` `countNumbersWith4(n)) ` ` ` ` ` `# This code is contributed by Nikita Tiwari. ` |

*chevron_right*

*filter_none*

## C#

`// C# program to compute sum of ` `// digits in numbers from 1 to n ` `using` `System; ` ` ` `public` `class` `GFG ` `{ ` ` ` ` ` `// Returns sum of all digits ` ` ` `// in numbers from 1 to n ` ` ` `static` `int` `countNumbersWith4(` `int` `n) ` ` ` `{ ` ` ` ` ` `// initialize result ` ` ` `int` `result = 0; ` ` ` ` ` `// One by one compute sum of digits ` ` ` `// in every number from 1 to n ` ` ` `for` `(` `int` `x = 1; x <= n; x++) ` ` ` `result += has4(x) ? 1 : 0; ` ` ` ` ` `return` `result; ` ` ` `} ` ` ` ` ` `// A utility function to compute sum ` ` ` `// of digits in a given number x ` ` ` `static` `bool` `has4(` `int` `x) ` ` ` `{ ` ` ` `while` `(x != 0) ` ` ` `{ ` ` ` `if` `(x % 10 == 4) ` ` ` `return` `true` `; ` ` ` `x = x / 10; ` ` ` `} ` ` ` `return` `false` `; ` ` ` `} ` ` ` ` ` `// Driver Code ` ` ` `public` `static` `void` `Main() ` ` ` `{ ` ` ` `int` `n = 328; ` ` ` `Console.WriteLine(` `"Count of numbers from 1 to "` ` ` `+ ` `" that have 4 as a a digit is "` ` ` `+ countNumbersWith4(n)) ; ` ` ` `} ` `} ` ` ` `// This code is contributed by Sam007 ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to compute sum of ` `// digits in numbers from 1 to n ` ` ` `// Returns sum of all digits ` `// in numbers from 1 to n ` `function` `countNumbersWith4(` `$n` `) ` `{ ` ` ` `$result` `= 0; ` `// initialize result ` ` ` ` ` `// One by one compute sum of ` ` ` `// digits in every number from 1 to n ` ` ` `for` `(` `$x` `= 1; ` `$x` `<= ` `$n` `; ` `$x` `++) ` ` ` `$result` `+= has4(` `$x` `) ? 1 : 0; ` ` ` ` ` `return` `$result` `; ` `} ` ` ` `// A utility function to compute ` `// sum of digits in a given number x ` `function` `has4(` `$x` `) ` `{ ` ` ` `while` `(` `$x` `!= 0) ` ` ` `{ ` ` ` `if` `(` `$x` `% 10 == 4) ` ` ` `return` `true; ` ` ` `$x` `= ` `intval` `(` `$x` `/ 10); ` ` ` `} ` ` ` `return` `false; ` `} ` ` ` `// Driver Code ` `$n` `= 328; ` `echo` `"Count of numbers from 1 to "` `. ` `$n` `. ` ` ` `" that have 4 as a a digit is "` `. ` ` ` `countNumbersWith4(` `$n` `); ` ` ` `// This code is contributed by Sam007 ` `?> ` |

*chevron_right*

*filter_none*

**Output :**

Count of numbers from 1 to 328 that have 4 as a a digit is 60

**Efficient Solution:**

Above is a naive solution. We can do it more efficiently by finding a pattern.

Let us take few examples.

Count of numbers from 0 to 9 = 1 Count of numbers from 0 to 99 = 1*9 + 10 = 19 Count of numbers from 0 to 999 = 19*9 + 100 = 271 In general, we can write count(10^{d}) = 9 * count(10^{d - 1}) + 10^{d - 1}

In below implementation, the above formula is implemented using dynamic programming as there are overlapping subproblems.

The above formula is one core step of the idea. Below is complete algorithm.

1) Find number of digits minus one in n. Let this value be 'd'. For 328, d is 2. 2) Compute some of digits in numbers from 1 to 10^{d}- 1. Let this sum be w. For 328, we compute sum of digits from 1 to 99 using above formula. 3) Find Most significant digit (msd) in n. For 328, msd is 3. 4.a) If MSD is 4. For example if n = 428, then count of numbers is sum of following. 1) Count of numbers from 1 to 399 2) Count of numbers from 400 to 428 which is 29. 4.b) IF MSD > 4. For example if n is 728, then count of numbers is sum of following. 1) Count of numbers from 1 to 399 and count of numbers from 500 to 699, i.e., "a[2] * 6" 2) Count of numbers from 400 to 499, i.e. 100 3) Count of numbers from 700 to 728, recur for 28 4.c) IF MSD < 4. For example if n is 328, then count of numbers is sum of following. 1) Count of numbers from 1 to 299 a 2) Count of numbers from 300 to 328, recur for 28

Below is implementation of above algorithm.

## C++

`// C++ program to count numbers having 4 as a digit ` `#include<bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to count numbers from 1 to n that have ` `// 4 as a digit ` `int` `countNumbersWith4(` `int` `n) ` `{ ` ` ` `// Base case ` ` ` `if` `(n < 4) ` ` ` `return` `0; ` ` ` ` ` `// d = number of digits minus one in n. For 328, d is 2 ` ` ` `int` `d = ` `log10` `(n); ` ` ` ` ` `// computing count of numbers from 1 to 10^d-1, ` ` ` `// d=0 a[0] = 0; ` ` ` `// d=1 a[1] = count of numbers from 0 to 9 = 1 ` ` ` `// d=2 a[2] = count of numbers from 0 to 99 = a[1]*9 + 10 = 19 ` ` ` `// d=3 a[3] = count of numbers from 0 to 999 = a[2]*19 + 100 = 171 ` ` ` `int` `*a = ` `new` `int` `[d+1]; ` ` ` `a[0] = 0, a[1] = 1; ` ` ` `for` `(` `int` `i=2; i<=d; i++) ` ` ` `a[i] = a[i-1]*9 + ` `ceil` `(` `pow` `(10,i-1)); ` ` ` ` ` `// Computing 10^d ` ` ` `int` `p = ` `ceil` `(` `pow` `(10, d)); ` ` ` ` ` `// Most significant digit (msd) of n, ` ` ` `// For 328, msd is 3 which can be obtained using 328/100 ` ` ` `int` `msd = n/p; ` ` ` ` ` `// If MSD is 4. For example if n = 428, then count of ` ` ` `// numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 399 ` ` ` `// 2) Count of numbers from 400 to 428 which is 29. ` ` ` `if` `(msd == 4) ` ` ` `return` `(msd)*a[d] + (n%p) + 1; ` ` ` ` ` `// IF MSD > 4. For example if n is 728, then count of ` ` ` `// numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 399 and count of numbers ` ` ` `// from 500 to 699, i.e., "a[2] * 6" ` ` ` `// 2) Count of numbers from 400 to 499, i.e. 100 ` ` ` `// 3) Count of numbers from 700 to 728, recur for 28 ` ` ` `if` `(msd > 4) ` ` ` `return` `(msd-1)*a[d] + p + countNumbersWith4(n%p); ` ` ` ` ` `// IF MSD < 4. For example if n is 328, then count of ` ` ` `// numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 299 a ` ` ` `// 2) Count of numbers from 300 to 328, recur for 28 ` ` ` `return` `(msd)*a[d] + countNumbersWith4(n%p); ` `} ` ` ` `// Driver Program ` `int` `main() ` `{ ` ` ` `int` `n = 328; ` ` ` `cout << ` `"Count of numbers from 1 to "` `<< n ` ` ` `<< ` `" that have 4 as a a digit is "` ` ` `<< countNumbersWith4(n) << endl; ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to count numbers having 4 as a digit ` `class` `GFG ` `{ ` ` ` `// Function to count numbers from ` `// 1 to n that have 4 as a digit ` `static` `int` `countNumbersWith4(` `int` `n) ` `{ ` ` ` `// Base case ` ` ` `if` `(n < ` `4` `) ` ` ` `return` `0` `; ` ` ` ` ` `// d = number of digits minus ` ` ` `// one in n. For 328, d is 2 ` ` ` `int` `d = (` `int` `)Math.log10(n); ` ` ` ` ` `// computing count of numbers from 1 to 10^d-1, ` ` ` `// d=0 a[0] = 0; ` ` ` `// d=1 a[1] = count of numbers from ` ` ` `// 0 to 9 = 1 ` ` ` `// d=2 a[2] = count of numbers from ` ` ` `// 0 to 99 = a[1]*9 + 10 = 19 ` ` ` `// d=3 a[3] = count of numbers from ` ` ` `// 0 to 999 = a[2]*19 + 100 = 171 ` ` ` `int` `[] a = ` `new` `int` `[d + ` `2` `]; ` ` ` `a[` `0` `] = ` `0` `; ` ` ` `a[` `1` `] = ` `1` `; ` ` ` ` ` `for` `(` `int` `i = ` `2` `; i <= d; i++) ` ` ` `a[i] = a[i - ` `1` `] * ` `9` `+ (` `int` `)Math.ceil(Math.pow(` `10` `, i - ` `1` `)); ` ` ` ` ` `// Computing 10^d ` ` ` `int` `p = (` `int` `)Math.ceil(Math.pow(` `10` `, d)); ` ` ` ` ` `// Most significant digit (msd) of n, ` ` ` `// For 328, msd is 3 which can be obtained using 328/100 ` ` ` `int` `msd = n / p; ` ` ` ` ` `// If MSD is 4. For example if n = 428, then count of ` ` ` `// numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 399 ` ` ` `// 2) Count of numbers from 400 to 428 which is 29. ` ` ` `if` `(msd == ` `4` `) ` ` ` `return` `(msd) * a[d] + (n % p) + ` `1` `; ` ` ` ` ` `// IF MSD > 4. For example if n ` ` ` `// is 728, then count of numbers ` ` ` `// is sum of following. ` ` ` `// 1) Count of numbers from 1 to ` ` ` `// 399 and count of numbers from ` ` ` `// 500 to 699, i.e., "a[2] * 6" ` ` ` `// 2) Count of numbers from 400 ` ` ` `// to 499, i.e. 100 ` ` ` `// 3) Count of numbers from 700 to ` ` ` `// 728, recur for 28 ` ` ` `if` `(msd > ` `4` `) ` ` ` `return` `(msd - ` `1` `) * a[d] + p + ` ` ` `countNumbersWith4(n % p); ` ` ` ` ` `// IF MSD < 4. For example if n is 328, then count of ` ` ` `// numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 299 a ` ` ` `// 2) Count of numbers from 300 to 328, recur for 28 ` ` ` `return` `(msd) * a[d] + countNumbersWith4(n % p); ` `} ` ` ` `// Driver code ` `public` `static` `void` `main (String[] args) ` `{ ` ` ` `int` `n = ` `328` `; ` ` ` `System.out.println(` `"Count of numbers from 1 to "` `+ n + ` ` ` `" that have 4 as a digit is "` `+ countNumbersWith4(n)); ` `} ` `} ` ` ` `// This code is contributed by chandan_jnu ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to count numbers having 4 as a digit ` `import` `math as mt ` ` ` `# Function to count numbers from 1 to n ` `# that have 4 as a digit ` `def` `countNumbersWith4(n): ` ` ` ` ` `# Base case ` ` ` `if` `(n < ` `4` `): ` ` ` `return` `0` ` ` ` ` `# d = number of digits minus one in n. ` ` ` `# For 328, d is 2 ` ` ` `d ` `=` `int` `(mt.log10(n)) ` ` ` ` ` `# computing count of numbers from 1 to 10^d-1, ` ` ` `# d=0 a[0] = 0 ` ` ` `# d=1 a[1] = count of numbers from 0 to 9 = 1 ` ` ` `# d=2 a[2] = count of numbers from ` ` ` `# 0 to 99 = a[1]*9 + 10 = 19 ` ` ` `# d=3 a[3] = count of numbers from ` ` ` `# 0 to 999 = a[2]*19 + 100 = 171 ` ` ` `a ` `=` `[` `1` `for` `i ` `in` `range` `(d ` `+` `1` `)] ` ` ` `a[` `0` `] ` `=` `0` ` ` `if` `len` `(a) > ` `1` `: ` ` ` `a[` `1` `] ` `=` `1` ` ` `for` `i ` `in` `range` `(` `2` `, d ` `+` `1` `): ` ` ` `a[i] ` `=` `a[i ` `-` `1` `] ` `*` `9` `+` `mt.ceil(` `pow` `(` `10` `, i ` `-` `1` `)) ` ` ` ` ` `# Computing 10^d ` ` ` `p ` `=` `mt.ceil(` `pow` `(` `10` `, d)) ` ` ` ` ` `# Most significant digit (msd) of n, ` ` ` `# For 328, msd is 3 which can be ` ` ` `# obtained using 328/100 ` ` ` `msd ` `=` `n ` `/` `/` `p ` ` ` ` ` `# If MSD is 4. For example if n = 428, ` ` ` `# then count of numbers is sum of following. ` ` ` `# 1) Count of numbers from 1 to 399 ` ` ` `# 2) Count of numbers from 400 to 428 which is 29. ` ` ` `if` `(msd ` `=` `=` `4` `): ` ` ` `return` `(msd) ` `*` `a[d] ` `+` `(n ` `%` `p) ` `+` `1` ` ` ` ` `# IF MSD > 4. For example if n is 728, ` ` ` `# then count of numbers is sum of following. ` ` ` `# 1) Count of numbers from 1 to 399 and count ` ` ` `# of numbers from 500 to 699, i.e., "a[2] * 6" ` ` ` `# 2) Count of numbers from 400 to 499, i.e. 100 ` ` ` `# 3) Count of numbers from 700 to 728, recur for 28 ` ` ` `if` `(msd > ` `4` `): ` ` ` `return` `((msd ` `-` `1` `) ` `*` `a[d] ` `+` `p ` `+` ` ` `countNumbersWith4(n ` `%` `p)) ` ` ` ` ` `# IF MSD < 4. For example if n is 328, ` ` ` `# then count of numbers is sum of following. ` ` ` `# 1) Count of numbers from 1 to 299 a ` ` ` `# 2) Count of numbers from 300 to 328, recur for 28 ` ` ` `return` `(msd) ` `*` `a[d] ` `+` `countNumbersWith4(n ` `%` `p) ` ` ` `# Driver Code ` `n ` `=` `328` `print` `(` `"Count of numbers from 1 to"` `, n, ` ` ` `"that have 4 as a digit is"` `, countNumbersWith4(n)) ` ` ` `# This code is contributed by mohit kumar 29 ` |

*chevron_right*

*filter_none*

## C#

`// C# program to count numbers having 4 as a digit ` `using` `System; ` ` ` `class` `GFG ` `{ ` `// Function to count numbers from ` `// 1 to n that have 4 as a digit ` `static` `int` `countNumbersWith4(` `int` `n) ` `{ ` ` ` `// Base case ` ` ` `if` `(n < 4) ` ` ` `return` `0; ` ` ` ` ` `// d = number of digits minus ` ` ` `// one in n. For 328, d is 2 ` ` ` `int` `d = (` `int` `)Math.Log10(n); ` ` ` ` ` `// computing count of numbers from 1 to 10^d-1, ` ` ` `// d=0 a[0] = 0; ` ` ` `// d=1 a[1] = count of numbers from ` ` ` `// 0 to 9 = 1 ` ` ` `// d=2 a[2] = count of numbers from ` ` ` `// 0 to 99 = a[1]*9 + 10 = 19 ` ` ` `// d=3 a[3] = count of numbers from ` ` ` `// 0 to 999 = a[2]*19 + 100 = 171 ` ` ` `int` `[] a = ` `new` `int` `[d+2]; ` ` ` `a[0] = 0; ` ` ` `a[1] = 1; ` ` ` ` ` `for` `(` `int` `i = 2; i <= d; i++) ` ` ` `a[i] = a[i - 1] * 9 + (` `int` `)Math.Ceiling(Math.Pow(10, i - 1)); ` ` ` ` ` `// Computing 10^d ` ` ` `int` `p = (` `int` `)Math.Ceiling(Math.Pow(10, d)); ` ` ` ` ` `// Most significant digit (msd) of n, ` ` ` `// For 328, msd is 3 which can be obtained using 328/100 ` ` ` `int` `msd = n / p; ` ` ` ` ` `// If MSD is 4. For example if n = 428, then count of ` ` ` `// numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 399 ` ` ` `// 2) Count of numbers from 400 to 428 which is 29. ` ` ` `if` `(msd == 4) ` ` ` `return` `(msd) * a[d] + (n % p) + 1; ` ` ` ` ` `// IF MSD > 4. For example if n is 728, then count of ` ` ` `// numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 399 and count of numbers ` ` ` `// from 500 to 699, i.e., "a[2] * 6" ` ` ` `// 2) Count of numbers from 400 to 499, i.e. 100 ` ` ` `// 3) Count of numbers from 700 to 728, recur for 28 ` ` ` `if` `(msd > 4) ` ` ` `return` `(msd - 1) * a[d] + p + countNumbersWith4(n % p); ` ` ` ` ` `// IF MSD < 4. For example if n is 328, then count of ` ` ` `// numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 299 a ` ` ` `// 2) Count of numbers from 300 to 328, recur for 28 ` ` ` `return` `(msd) * a[d] + countNumbersWith4(n % p); ` `} ` ` ` `// Driver code ` `static` `void` `Main() ` `{ ` ` ` `int` `n = 328; ` ` ` `Console.WriteLine(` `"Count of numbers from 1 to "` `+ n + ` ` ` `" that have 4 as a digit is "` `+ countNumbersWith4(n)); ` `} ` `} ` ` ` `// This code is contributed by chandan_jnu ` |

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to count numbers having ` `// 4 as a digit ` ` ` `// Function to count numbers from 1 to n ` `// that have 4 as a digit ` `function` `countNumbersWith4(` `$n` `) ` `{ ` ` ` `// Base case ` ` ` `if` `(` `$n` `< 4) ` ` ` `return` `0; ` ` ` ` ` `// d = number of digits minus one in n. ` ` ` `// For 328, d is 2 ` ` ` `$d` `= (int)log10(` `$n` `); ` ` ` ` ` `// computing count of numbers from 1 to 10^d-1, ` ` ` `// d=0 a[0] = 0; ` ` ` `// d=1 a[1] = count of numbers from 0 to 9 is 1 ` ` ` `// d=2 a[2] = count of numbers from 0 to 99 is ` ` ` `// a[1]*9 + 10 = 19 ` ` ` `// d=3 a[3] = count of numbers from 0 to 999 is ` ` ` `// a[2]*19 + 100 = 171 ` ` ` `$a` `= ` `array_fill` `(0, ` `$d` `+ 1, NULL); ` ` ` `$a` `[0] = 0; ` ` ` `$a` `[1] = 1; ` ` ` `for` `(` `$i` `= 2; ` `$i` `<= ` `$d` `; ` `$i` `++) ` ` ` `$a` `[` `$i` `] = ` `$a` `[` `$i` `- 1] * 9 + ` ` ` `ceil` `(pow(10, ` `$i` `- 1)); ` ` ` ` ` `// Computing 10^d ` ` ` `$p` `= ` `ceil` `(pow(10, ` `$d` `)); ` ` ` ` ` `// Most significant digit (msd) of n, ` ` ` `// For 328, msd is 3 which can be ` ` ` `// obtained using 328/100 ` ` ` `$msd` `= ` `intval` `(` `$n` `/ ` `$p` `); ` ` ` ` ` `// If MSD is 4. For example if n = 428, ` ` ` `// then count of numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 399 ` ` ` `// 2) Count of numbers from 400 to 428 which is 29. ` ` ` `if` `(` `$msd` `== 4) ` ` ` `return` `(` `$msd` `) * ` `$a` `[` `$d` `] + (` `$n` `% ` `$p` `) + 1; ` ` ` ` ` `// IF MSD > 4. For example if n is 728, ` ` ` `// then count of numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 399 and ` ` ` `// count of numbers from 500 to 699, i.e., "a[2] * 6" ` ` ` `// 2) Count of numbers from 400 to 499, i.e. 100 ` ` ` `// 3) Count of numbers from 700 to 728, recur for 28 ` ` ` `if` `(` `$msd` `> 4) ` ` ` `return` `(` `$msd` `- 1) * ` `$a` `[` `$d` `] + ` `$p` `+ ` ` ` `countNumbersWith4(` `$n` `% ` `$p` `); ` ` ` ` ` `// IF MSD < 4. For example if n is 328, then ` ` ` `// count of numbers is sum of following. ` ` ` `// 1) Count of numbers from 1 to 299 a ` ` ` `// 2) Count of numbers from 300 to 328, recur for 28 ` ` ` `return` `(` `$msd` `) * ` `$a` `[` `$d` `] + ` ` ` `countNumbersWith4(` `$n` `% ` `$p` `); ` `} ` ` ` `// Driver Code ` `$n` `= 328; ` `echo` `"Count of numbers from 1 to "` `. ` `$n` `. ` ` ` `" that have 4 as a digit is "` `. ` ` ` `countNumbersWith4(` `$n` `) . ` `"\n"` `; ` ` ` `// This code is contributed by ita_c ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

Count of numbers from 1 to 328 that have 4 as a a digit is 60

This article is contributed by **Shivam**. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Count of N-digit numbers having digit XOR as single digit
- Count of numbers in range which are divisible by M and have digit D at odd places
- Count n digit numbers not having a particular digit
- Count numbers in a range with digit sum divisible by K having first and last digit different
- Count of Numbers in Range where first digit is equal to last digit of the number
- Check if all sub-numbers have distinct Digit product
- Count divisors of n that have at-least one digit common with n
- Count pairs in an array which have at least one digit common
- Count 'd' digit positive integers with 0 as a digit
- Count of pairs (A, B) in range 1 to N such that last digit of A is equal to the first digit of B
- Longest subarray such that adjacent elements have at least one common digit | Set 1
- Longest subsequence such that adjacent elements have at least one common digit
- Longest subarray such that adjacent elements have at least one common digit | Set - 2
- Maximum subset sum such that no two elements in set have same digit in them
- Count of N-digit Numbers having Sum of even and odd positioned digits divisible by given numbers
- Count the numbers < N which have equal number of divisors as K
- Count numbers have all 1s together in binary representation
- Check if frequency of each digit is less than the digit
- Largest number less than N with digit sum greater than the digit sum of N
- Arrange array elements such that last digit of an element is equal to first digit of the next element