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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ Program of the
// above approach
  
#include <bits/stdc++.h>
  
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);
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


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.