# Count numbers from a given range that contains a given number as the suffix

Given three integers A, L, and R, the task is to count numbers from a range L to R which contains A as its suffix.

Examples:

Input: A = 2, L = 2, R = 20
Output: 2
Explanation:
Only two possible numbers from the given range that satisfies the conditions are 2 and 12.

Input: A = 25, L = 25, R = 273
Output: 3
Explanation:
The three numbers from the given range that satisfies the conditions are 25, 125 and 225.

Naive Approach: The simplest approach to solve the problem is to traverse the numbers from the range L to R, and check if the number ends with A or not. For all numbers found to be true, increment the count of such numbers by 1. Finally, print the final count.

Time complexity: O(B)
Auxiliary Space: O(log2R)

Efficient Approach: To optimize the above approach, follow the steps below:

• Count and store the number of digits of A and store it in a variable, say, count.
• Raise 10 to the power of count of digits of A,i.e. 10count.
• Check for every cycle of 10count if it lies in the range [L, R]. If found to be true, then increment the count by 1.
• Print the final value of count.

Below is the implementation of the above approach:

## C++

 `// C++ Program of the ` `// above approach ` ` `  `#include ` ` `  `using` `namespace` `std; ` ` `  `// Function to count the number ` `// ends with given number in range ` `void` `countNumEnds(``int` `A, ``int` `L, ``int` `R) ` `{ ` `    ``int` `temp, count = 0, digits; ` `    ``int` `cycle; ` ` `  `    ``// Find number of digits in A ` `    ``digits = ``log10``(A) + 1; ` ` `  `    ``// Find the power of 10 ` `    ``temp = ``pow``(10, digits); ` `    ``cycle = temp; ` ` `  `    ``while` `(temp <= R) { ` ` `  `        ``if` `(temp >= L) ` `            ``count++; ` ` `  `        ``// Incrementing the A ` `        ``temp += cycle; ` `    ``} ` ` `  `    ``cout << count; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `A = 2, L = 2, R = 20; ` ` `  `    ``// Function Call ` `    ``countNumEnds(A, L, R); ` `}`

## Java

 `// Java Program of the ` `// above approach ` `class` `GFG{ ` ` `  `// Function to count the number ` `// ends with given number in range ` `static` `void` `countNumEnds(``int` `A,  ` `                         ``int` `L, ``int` `R) ` `{ ` `  ``int` `temp, count = ``0``, digits; ` `  ``int` `cycle; ` ` `  `  ``// Find number of digits in A ` `  ``digits = (``int``) (Math.log10(A) + ``1``); ` ` `  `  ``// Find the power of 10 ` `  ``temp = (``int``) Math.pow(``10``, digits); ` `  ``cycle = temp; ` ` `  `  ``while` `(temp <= R)  ` `  ``{ ` `    ``if` `(temp >= L) ` `      ``count++; ` ` `  `    ``// Incrementing the A ` `    ``temp += cycle; ` `  ``} ` `  ``System.out.print(count); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `  ``int` `A = ``2``, L = ``2``, R = ``20``; ` ` `  `  ``// Function Call ` `  ``countNumEnds(A, L, R); ` `} ` `} ` ` `  `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 program of the  ` `# above approach  ` `from` `math ``import` `log10 ` ` `  `# Function to count the number ` `# ends with given number in range ` `def` `countNumEnds(A, L, R): ` ` `  `    ``count ``=` `0` ` `  `    ``# Find number of digits in A ` `    ``digits ``=` `int``(log10(A) ``+` `1``) ` ` `  `    ``# Find the power of 10 ` `    ``temp ``=` `int``(``pow``(``10``, digits)) ` `    ``cycle ``=` `temp ` ` `  `    ``while``(temp <``=` `R): ` `        ``if``(temp >``=` `L): ` `            ``count ``+``=` `1` ` `  `        ``# Incrementing the A  ` `        ``temp ``+``=` `cycle ` ` `  `    ``print``(count) ` ` `  `# Driver Code ` `A ``=` `2` `L ``=` `2` `R ``=` `20` ` `  `# Function call ` `countNumEnds(A, L, R) ` ` `  `# This code is contributed by Shivam Singh `

## C#

 `// C# program of the ` `// above approach ` `using` `System; ` ` `  `class` `GFG{ ` ` `  `// Function to count the number ` `// ends with given number in range ` `static` `void` `countNumEnds(``int` `A, ``int` `L, ` `                         ``int` `R) ` `{ ` `    ``int` `temp, count = 0, digits; ` `    ``int` `cycle; ` `     `  `    ``// Find number of digits in A ` `    ``digits = (``int``)(Math.Log10(A) + 1); ` `     `  `    ``// Find the power of 10 ` `    ``temp = (``int``)Math.Pow(10, digits); ` `    ``cycle = temp; ` `     `  `    ``while` `(temp <= R)  ` `    ``{ ` `        ``if` `(temp >= L) ` `        ``count++; ` `     `  `        ``// Incrementing the A ` `        ``temp += cycle; ` `    ``} ` `    ``Console.Write(count); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``int` `A = 2, L = 2, R = 20; ` `     `  `    ``// Function call ` `    ``countNumEnds(A, L, R); ` `} ` `} ` ` `  `// This code is contributed by Amit Katiyar`

Output:

```2
```

Time Complexity: O(N), where N is the range.
Auxiliary Space: O(1)

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.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.