Count numbers in range such that digits in it and it’s product with q are unequal

• Difficulty Level : Easy
• Last Updated : 04 May, 2021

Given a range of numbers [l, r] and an integer q. The task is to count all such number in the given range such that any digit of the number does not match with any digit in its product with the given number q.

Examples

Input : l = 10, r = 12, q = 2
Output : 1
10*2 = 20 which has 0 as same digit
12*2 = 24 which as 2 as same digit
11*2 = 22 no same digit

Input : l = 5, r = 15, q = 2
Output : 9

Source : Goldman Sachs Interview set 46
The idea is to run a loop from l to r to generate all numbers in the range and convert each such number n and it’s product with q, i.e. n*q to strings using to_string() method and then check if any character in string2 is present in string1 or not using basic string hashing.

Below is the implementation of the above approach:

C++

 // C++ program for above approach#include using namespace std; // Function to check if all of the digits// in a number and it's product with q// are unequal or notbool checkIfUnequal(int n, int q){     // convert first number into string    string s1 = to_string(n);    int a = { 0 };     // Insert elements from 1st number    // to hash    for (int i = 0; i < s1.size(); i++)        a[s1[i] - '0']++;     // Calculate corresponding product    int prod = n * q;     // Convert the product to string    string s2 = to_string(prod);     // Using the hash check if any digit of    // product matches with the digits of    // input number    for (int i = 0; i < s2.size(); i++)    {        // If yes, return false        if (a[s2[i] - '0'])            return false;    }     // Return true    return true;} // Function to count numbers in the range [l, r]// such that all of the digits of the number and// it's product with q are unequalint countInRange(int l, int r, int q){    int count = 0;     for (int i = l; i <= r; i++) {        // check for every number between l and r        if (checkIfUnequal(i, q))            count++;    }     return count;} // Driver Codeint main(){     int l = 10, r = 12, q = 2;     // Function Call    cout << countInRange(l, r, q);    return 0;}

Java

 // Java program for above approachclass GfG {     // Function to check if all of the digits    // in a number and it's product with q    // are unequal or not    static boolean checkIfUnequal(int n, int q)    {         // convert first number into string        String s1 = Integer.toString(n);        int a[] = new int;         // Insert elements from 1st number        // to hash        for (int i = 0; i < s1.length(); i++)            a[s1.charAt(i) - '0']++;         // Calculate corresponding product        int prod = n * q;         // Convert the product to string        String s2 = Integer.toString(prod);         // Using the hash check if any digit of        // product matches with the digits of        // input number        for (int i = 0; i < s2.length(); i++)        {            // If yes, return false            if (a[s2.charAt(i) - '0'] > 0)                return false;        }        // else, return true        return true;    }     // Function to count numbers in the range [l, r]    // such that all of the digits of the number and    // it's product with q are unequal    static int countInRange(int l, int r, int q)    {        int count = 0;         for (int i = l; i <= r; i++) {             // check for every number between l and r            if (checkIfUnequal(i, q))                count++;        }         return count;    }     // Driver Code    public static void main(String[] args)    {         int l = 10, r = 12, q = 2;         // Function Call        System.out.println(countInRange(l, r, q));    }}

Python3

 # Python 3 program for above approach # Function to check if all of the digits# in a number and it's product with q# are unequal or notdef checkIfUnequal(n, q):         # convert first number into string    s1 = str(n)    a = [0 for i in range(26)]     # Insert elements from 1st number    # to hash    for i in range(0, len(s1), 1):        a[ord(s1[i]) - ord('0')] += 1     # Calculate corresponding product    prod = n * q     # Convert the product to string    s2 = str(prod)     # Using the hash check if any digit of    # product matches with the digits of    # input number    for i in range(0, len(s2), 1):                 # If yes, return false        if (a[ord(s2[i]) - ord('0')]):            return False     # Return true    return True # Function to count numbers in the range [l, r]# such that all of the digits of the number and# it's product with q are unequaldef countInRange(l, r, q):    count = 0     for i in range(l, r + 1, 1):                 # check for every number between l and r        if (checkIfUnequal(i, q)):            count += 1         return count # Driver Codeif __name__ == '__main__':    l = 10    r = 12    q = 2     # Function call    print(countInRange(l, r, q)) # This code is contributed by# Sahil_Shelangia

C#

 // C# program for above approachusing System; class GfG {     // Function to check if all of the digits    // in a number and it's product with q    // are unequal or not    static bool checkIfUnequal(int n, int q)    {         // convert first number into string        string s1 = n.ToString();        int[] a = new int;         // Insert elements from 1st number        // to hash        for (int i = 0; i < s1.Length; i++)            a[s1[i] - '0']++;         // Calculate corresponding product        int prod = n * q;         // Convert the product to string        string s2 = prod.ToString();         // Using the hash check if any digit of        // product matches with the digits of        // input number        for (int i = 0; i < s2.Length; i++)        {            // If yes, return false            if (a[s2[i] - '0'])                return false;        }         // Else, return true        return true;    }     // Function to count numbers in the range [l, r]    // such that all of the digits of the number and    // it's product with q are unequal    static int countInRange(int l, int r, int q)    {        int count = 0;         for (int i = l; i <= r; i++)        {            // check for every number between l and r            if (checkIfUnequal(i, q))                count++;        }         return count;    }     // Driver Code    public static void Main()    {         int l = 10, r = 12, q = 2;         // Function call        Console.WriteLine(countInRange(l, r, q));    }} // This code is contributed bt Archana_kumari

PHP

 // PHP program for above code // Function to check if all of the digits// in a number and it's product with q// are unequal or notfunction checkIfUnequal(\$n, \$q){    // convert first number into string    \$s1 = strval(\$n);    \$a = array_fill(0, 26, NULL);     // Insert elements from 1st number    // to hash    for (\$i = 0; \$i < strlen(\$s1); \$i++)        \$a[ord(\$s1[\$i]) - ord('0')]++;     // Calculate corresponding product    \$prod = \$n * \$q;     // Convert the product to string    \$s2 = strval(\$prod);     // Using the hash check if any digit of    // product matches with the digits of    // input number    for (\$i = 0; \$i < strlen(\$s2); \$i++)    {               // If yes, return false       if (\$a[ord(\$s2[\$i]) - ord('0')])            return false;    }     // Else, return true    return true;} // Function to count numbers in the range// [l, r] such that all of the digits of the// number and it's product with q are unequalfunction countInRange(\$l, \$r, \$q){    \$count = 0;     for (\$i = \$l; \$i <= \$r; \$i++)    {        // check for every number between l and r        if (checkIfUnequal(\$i, \$q))            \$count++;    }     return \$count;} // Driver Code\$l = 10;\$r = 12;\$q = 2; // Function callecho countInRange(\$l, \$r, \$q); // This code is contributed by ita_c?>

Javascript


Output
1

My Personal Notes arrow_drop_up