Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

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:

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

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
Recommended Articles
Page :

Start Your Coding Journey Now!