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

• Last Updated : 16 Apr, 2021

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`

## Javascript

 ``

Output:

`2`

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

My Personal Notes arrow_drop_up