Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

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

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

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 <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);
}

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




<script>
 
// JavaScript program for
// the above approach
  
// Function to count the number
// ends with given number in range
function countNumEnds(A, L, R)
{
  let temp = 0, count = 0, digits = 0;
  let cycle = 0;
   
  // Find number of digits in A
  digits = Math.round(Math.log10(A)) + 1;
   
  // Find the power of 10
  temp = Math.round(Math.pow(10, digits));
  cycle = temp;
   
  while (temp <= R)
  {
    if (temp >= L)
      count++;
   
    // Incrementing the A
    temp += cycle;
  }
  document.write(count);
}
 
// Driver code
 
  let A = 2, L = 2, R = 20;
   
  // Function Call
  countNumEnds(A, L, R);
   
  // This code is contributed by splevel62.
</script>

Output: 

2

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


My Personal Notes arrow_drop_up
Last Updated : 16 Apr, 2021
Like Article
Save Article
Similar Reads
Related Tutorials