Count numbers with same first and last digits - GeeksforGeeks

28 Mar, 2022
Given an interval, the task is to count numbers that have the same first and last digits. For example, 1231 has the same first and last digits.  
Examples: 
Input  : start = 7,  end : 68
Output : 9
Number with same first and last digits are,
7 8 9 11 22 33 44 55 66.

Input  : start = 5,  end : 40
Output : 8
Let us first consider the below examples to understand the approach. 
From 120 to 130, only 121 has same starting and ending digit
From 440 to 450, only 444 has same starting and ending digit
From 1050 to 1060, only 1051 has same starting and ending digit
From the above examples, we can observe that in each ten number span we have only one number which has the given property except 1 to 10 which has 9 numbers (all one-digit numbers) having the same starting and ending digit. Using above property we can solve given problem, first we break the given interval into two parts that is if interval is l to r, we break this into 1 to l and 1 to r, our answer is obtained by subtracting result of first query from second query. Now we remain to find the count of numbers with given property in range 1 to x, for this, we divide x by 10, which gives the number of 10-spans. We add 9 to the span for taking one-digit numbers into account. If the last digit of x is smaller than the first digit of x, then 1 should be decreased in the final answer to discard the last ten span number because that number is out of range.  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to get count of numbers with// same start and end digit in an interval#include <bits/stdc++.h>using namespace std; // Utility method to get first digit of xint getFirstDigit(int x){    while (x >= 10)        x /= 10;    return x;} // method to return count of numbers with same// starting and ending digit from 1 upto xint getCountWithSameStartAndEndFrom1(int x){    if (x < 10)        return x;     // get ten-spans from 1 to x    int tens = x / 10;     // add 9 to consider all 1 digit numbers    int res = tens + 9;     // Find first and last digits    int firstDigit = getFirstDigit(x);    int lastDigit = x % 10;     // If last digit is smaller than first digit    // then decrease count by 1    if (lastDigit < firstDigit)        res--;     return res;} // Method to return count of numbers with same starting// and ending digit between start and endint getCountWithSameStartAndEnd(int start, int end){    return getCountWithSameStartAndEndFrom1(end)    - getCountWithSameStartAndEndFrom1(start - 1);} // Driver code to test above methodsint main(){    int start = 5, end = 40;     cout << getCountWithSameStartAndEnd(start, end);     return 0;}
// Java program to get count of numbers with// same start and end digit in an intervalimport java.util.*; class Digits {    // Utility method to get first digit of x    public static int getFirstDigit(int x)    {        while (x >= 10)            x /= 10;        return x;    }     // method to return count of numbers with same    // starting and ending digit from 1 upto x    public static int getCountWithSameStartAndEndFrom1(int x)    {        if (x < 10)            return x;         // get ten-spans from 1 to x        int tens = x / 10;         // add 9 to consider all 1 digit numbers        int res = tens + 9;         // Find first and last digits        int firstDigit = getFirstDigit(x);        int lastDigit = x % 10;         // If last digit is smaller than first        // digit then decrease count by 1        if (lastDigit < firstDigit)            res--;         return res;    }     // Method to return count of numbers with same    // starting and ending digit between start and end    public static int getCountWithSameStartAndEnd(int start,                                                  int end)    {        return getCountWithSameStartAndEndFrom1(end)        - getCountWithSameStartAndEndFrom1(start - 1);    }     // driver code    public static void main(String[] args)    {        int start = 5, end = 40;        System.out.print(getCountWithSameStartAndEnd(start,                                                     end));    }} // This code is contributed by rishabh_jain
# Python3 program to get count of numbers with# same start and end digit in an interval # Utility method to get first digit of xdef getFirstDigit(x) :    while (x >= 10) :        x //= 10    return x # method to return count of numbers with same# starting and ending digit from 1 upto xdef getCountWithSameStartAndEndFrom1(x) :    if (x < 10):        return x     # get ten-spans from 1 to x    tens = x // 10     # add 9 to consider all 1 digit numbers    res = tens + 9     # Find first and last digits    firstDigit = getFirstDigit(x)    lastDigit = x % 10     # If last digit is smaller than first digit    # then decrease count by 1    if (lastDigit < firstDigit) :        res = res - 1     return res # Method to return count of numbers with same starting# and ending digit between start and enddef getCountWithSameStartAndEnd(start, end) :    return (getCountWithSameStartAndEndFrom1(end) -           getCountWithSameStartAndEndFrom1(start - 1)) # Driver Codestart = 5end = 40print(getCountWithSameStartAndEnd(start, end)) # This code is contributed by rishabh_jain# Improved by cidacoder
// C# program to get count of numbers with// same start and end digit in an intervalusing System; class GFG {         // Utility method to get first digit    // of x    public static int getFirstDigit(int x)    {        while (x >= 10)            x /= 10;                     return x;    }     // method to return count of numbers    // with same starting and ending digit    // from 1 upto x    public static int getCountWithSameStartAndEndFrom1(                                                  int x)    {                 if (x < 10)            return x;         // get ten-spans from 1 to x        int tens = x / 10;         // add 9 to consider all 1 digit        // numbers        int res = tens + 9;         // Find first and last digits        int firstDigit = getFirstDigit(x);        int lastDigit = x % 10;         // If last digit is smaller than        // first digit then decrease count        // by 1        if (lastDigit < firstDigit)            res--;         return res;    }     // Method to return count of numbers    // with same starting and ending digit    // between start and end    public static int getCountWithSameStartAndEnd(                                 int start, int end)    {        return getCountWithSameStartAndEndFrom1(end)        - getCountWithSameStartAndEndFrom1(start - 1);    }     // driver code    public static void Main()    {        int start = 5, end = 40;                 Console.Write(getCountWithSameStartAndEnd(start,                                                end));    }} // This code is contributed by nitin mittal.
<?php// PHP program to get count of numbers with// same start and end digit in an interval // method to get first digit of xfunction getFirstDigit($x){    while ($x >= 10)        $x /= 10;    return $x;} // method to return count// of numbers with same// starting and ending// digit from 1 upto xfunction getCountWithSameStartAndEndFrom1($x){    if ($x < 10)        return $x;     // get ten-spans from 1 to x    $tens = $x / 10;     // add 9 to consider all    // 1 digit numbers    $res = $tens + 9;     // Find first and last digits    $firstDigit = getFirstDigit($x);    $lastDigit = $x % 10;     // If last digit is smaller    // than first digit    // then decrease count by 1    if ($lastDigit < $firstDigit)        $res--;     return $res;} // Method to return count of// numbers with same starting// and ending digit between// start and endfunction getCountWithSameStartAndEnd($start, $end){    return getCountWithSameStartAndEndFrom1($end)          - getCountWithSameStartAndEndFrom1($start - 1);}     // Driver Code    $start = 5;    $end = 40;    echo getCountWithSameStartAndEnd($start, $end); // This code is contributed by nitin mittal.?>
<script> // JavaScript program to get count of numbers with// same start and end digit in an interval     // Utility method to get first digit of x    function getFirstDigit(x)    {        while (x >= 10)            x /= 10;        return x;    }       // method to return count of numbers with same    // starting and ending digit from 1 upto x    function getCountWithSameStartAndEndFrom1(x)    {        if (x < 10)            return x;           // get ten-spans from 1 to x        let tens = x / 10;           // add 9 to consider all 1 digit numbers        let res = tens + 9;           // Find first and last digits        let firstDigit = getFirstDigit(x);        let lastDigit = x % 10;           // If last digit is smaller than first        // digit then decrease count by 1        if (lastDigit < firstDigit)            res--;           return res;    }       // Method to return count of numbers with same    // starting and ending digit between start and end    function getCountWithSameStartAndEnd(start,                                               end)    {        return getCountWithSameStartAndEndFrom1(end)        - getCountWithSameStartAndEndFrom1(start - 1);    }    // Driver code      let start = 5, end = 40;      document.write(getCountWithSameStartAndEnd(start,                                                     end)); </script>
Output: 
8
Time Complexity: O(log10N)
Auxiliary Space: O(1)This article is contributed by Utkarsh Trivedi. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nitin mittal
chinmoy1997pal
cidacoder
KaranSachy
rohitsingh07052
Amazon
number-digits
Mathematical
Amazon
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Program for Decimal to Binary Conversion
Modulo 10^9+7 (1000000007)
Find all factors of a natural number | Set 1
Program to find sum of elements in a given array
The Knight's tour problem | Backtracking-1
Program for factorial of a number
Minimum number of jumps to reach end