 GeeksforGeeks App
Open App Browser
Continue

# Numbers in a Range with given Digital Root

Given an integer K and a range of consecutive numbers [L, R]. The task is to count the numbers from the given range which have digital root as K (1 ≤ K ≤ 9). Digital root is sum of digits of a number until it becomes a single digit number. For example, 256 -> 2 + 5 + 6 = 13 -> 1 + 3 = 4.

Examples:

Input: L = 10, R = 22, K = 3
Output:
12 and 21 are the only numbers from the range whose digit sum is 3.

Input: L = 100, R = 200, K = 5
Output: 11

Approach:

• First thing is to note that for any number Sum of Digits is equal to Number % 9. If remainder is 0, then sum of digits is 9.
• So if K = 9, then replace K with 0.
• Task, now is to find count of numbers in range L to R with modulo 9 equal to K.
• Divide the entire range into the maximum possible groups of 9 starting with L (TotalRange / 9), since in each range there will be exactly one number with modulo 9 equal to K.
• Loop over rest number of elements from R to R – count of rest elements, and check if any number satisfies the condition.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``#define ll long long int``using` `namespace` `std;` `// Function to return the count``// of required numbers``int` `countNumbers(``int` `L, ``int` `R, ``int` `K)``{``    ``if` `(K == 9)``        ``K = 0;` `    ``// Count of numbers present``    ``// in given range``    ``int` `totalnumbers = R - L + 1;` `    ``// Number of groups of 9 elements``    ``// starting from L``    ``int` `factor9 = totalnumbers / 9;` `    ``// Left over elements not covered``    ``// in factor 9``    ``int` `rem = totalnumbers % 9;` `    ``// One Number in each group of 9``    ``int` `ans = factor9;` `    ``// To check if any number in rem``    ``// satisfy the property``    ``for` `(``int` `i = R; i > R - rem; i--) {``        ``int` `rem1 = i % 9;``        ``if` `(rem1 == K)``            ``ans++;``    ``}` `    ``return` `ans;``}` `// Driver code``int` `main()``{``    ``int` `L = 10;``    ``int` `R = 22;``    ``int` `K = 3;``    ``cout << countNumbers(L, R, K);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach` `class` `GFG {` `// Function to return the count``// of required numbers``    ``static` `int` `countNumbers(``int` `L, ``int` `R, ``int` `K) {``        ``if` `(K == ``9``) {``            ``K = ``0``;``        ``}` `        ``// Count of numbers present``        ``// in given range``        ``int` `totalnumbers = R - L + ``1``;` `        ``// Number of groups of 9 elements``        ``// starting from L``        ``int` `factor9 = totalnumbers / ``9``;` `        ``// Left over elements not covered``        ``// in factor 9``        ``int` `rem = totalnumbers % ``9``;` `        ``// One Number in each group of 9``        ``int` `ans = factor9;` `        ``// To check if any number in rem``        ``// satisfy the property``        ``for` `(``int` `i = R; i > R - rem; i--) {``            ``int` `rem1 = i % ``9``;``            ``if` `(rem1 == K) {``                ``ans++;``            ``}``        ``}` `        ``return` `ans;``    ``}` `// Driver code``    ``public` `static` `void` `main(String[] args) {``        ``int` `L = ``10``;``        ``int` `R = ``22``;``        ``int` `K = ``3``;``        ``System.out.println(countNumbers(L, R, K));``    ``}``}``/* This code contributed by PrinciRaj1992 */`

## Python3

 `# Python3 implementation of the approach` `# Function to return the count``# of required numbers``def` `countNumbers(L, R, K):` `    ``if` `(K ``=``=` `9``):``        ``K ``=` `0` `    ``# Count of numbers present``    ``# in given range``    ``totalnumbers ``=` `R ``-` `L ``+` `1` `    ``# Number of groups of 9 elements``    ``# starting from L``    ``factor9 ``=` `totalnumbers ``/``/` `9` `    ``# Left over elements not covered``    ``# in factor 9``    ``rem ``=` `totalnumbers ``%` `9` `    ``# One Number in each group of 9``    ``ans ``=` `factor9` `    ``# To check if any number in rem``    ``# satisfy the property``    ``for` `i ``in` `range``(R, R ``-` `rem, ``-``1``):``        ``rem1 ``=` `i ``%` `9``        ``if` `(rem1 ``=``=` `K):``            ``ans ``+``=` `1``    ` `    ``return` `ans` `# Driver code``L ``=` `10``R ``=` `22``K ``=` `3``print``(countNumbers(L, R, K))` `# This code is contributed``# by mohit kumar`

## C#

 `// C# implementation of the approach``using` `System ;` `class` `GFG``{` `    ``// Function to return the count``    ``// of required numbers``    ``static` `int` `countNumbers(``int` `L, ``int` `R, ``int` `K)``    ``{``        ``if` `(K == 9)``        ``{``            ``K = 0;``        ``}` `        ``// Count of numbers present``        ``// in given range``        ``int` `totalnumbers = R - L + 1;` `        ``// Number of groups of 9 elements``        ``// starting from L``        ``int` `factor9 = totalnumbers / 9;` `        ``// Left over elements not covered``        ``// in factor 9``        ``int` `rem = totalnumbers % 9;` `        ``// One Number in each group of 9``        ``int` `ans = factor9;` `        ``// To check if any number in rem``        ``// satisfy the property``        ``for` `(``int` `i = R; i > R - rem; i--)``        ``{``            ``int` `rem1 = i % 9;``            ``if` `(rem1 == K)``            ``{``                ``ans++;``            ``}``        ``}` `        ``return` `ans;``    ``}` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `L = 10;``        ``int` `R = 22;``        ``int` `K = 3;``        ` `        ``Console.WriteLine(countNumbers(L, R, K));``    ``}``}` `/* This code is contributed by Ryuga */`

## PHP

 ` ``\$R` `- ``\$rem``; ``\$i``--)``    ``{``        ``\$rem1` `= ``\$i` `% 9;``        ``if` `(``\$rem1` `== ``\$K``)``            ``\$ans``++;``    ``}` `    ``return` `\$ans``;``}` `// Driver code``\$L` `= 10;``\$R` `= 22;``\$K` `= 3;``echo` `countNumbers(``\$L``, ``\$R``, ``\$K``);` `// This code is contributed by Ita_c``?>`

## Javascript

 ``

Output:

`2`

Time Complexity: O(R)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up