Related Articles
Print all numbers up to N having product of digits equal to K
• Difficulty Level : Expert
• Last Updated : 09 Mar, 2021

Given two integers N and K, the task is to print all the numbers from the range [1, N] whose product of digits is equal to K. If no such number is found, then print “-1”.

Examples:

Input: N =100, K = 25
Output: 55
Explanation: There is only a single number 55 whose product of digits is equal to K.

Input: N = 500, K = 10
Output: 25 52 125 152 215 251

Approach: Follow the steps below to solve the problem:

• Initialize a variable, say flag, to store whether any number satisfying the given conditions exists or not.
• Declare a function, productOfDigits(), to find the product of digits of the number.
• Iterate over the range [1, N]:
• If the product of digits of arr[i] is equal to K, print that number and set flag = 1.
• If flag is equal to 0, which means that no such number is found in the range [1, N]. Therefore, print “-1”.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to find the product``// of digits of a number``int` `productOfDigits(``int` `N)``{``    ``// Stores the product of``    ``// digits of a number``    ``int` `product = 1;` `    ``while` `(N != 0) {``        ``product = product * (N % 10);``        ``N = N / 10;``    ``}` `    ``// Return the product``    ``return` `product;``}` `// Function to print all numbers upto``// N having product of digits equal to K``void` `productOfDigitsK(``int` `N, ``int` `K)``{``    ``// Stores whether any number satisfying``    ``// the given conditions exists or not``    ``int` `flag = 0;` `    ``// Iterate over the range [1, N]``    ``for` `(``int` `i = 1; i <= N; ++i) {` `        ``// If product of digits of``        ``// arr[i] is equal to K or not``        ``if` `(K == productOfDigits(i)) {` `            ``// Print that number``            ``cout << i << ``" "``;``            ``flag = 1;``        ``}``    ``}` `    ``// If no numbers are found``    ``if` `(flag == 0)``        ``cout << ``"-1"``;``}` `// Driver Code``int` `main()``{``    ``// Given value of N & K``    ``int` `N = 500, K = 10;` `    ``// Function call to print all numbers``    ``// from [1, N] with product of digits K``    ``productOfDigitsK(N, K);``}`

## Java

 `// Java Program to implement``// the above approach``import` `java.io.*;``import` `java.util.*;` `class` `GFG {` `  ``// Function to find the product``  ``// of digits of a number``  ``static` `int` `productOfDigits(``int` `N)``  ``{``    ` `    ``// Stores the product of``    ``// digits of a number``    ``int` `product = ``1``;` `    ``while` `(N != ``0``) {``      ``product = product * (N % ``10``);``      ``N = N / ``10``;``    ``}` `    ``// Return the product``    ``return` `product;``  ``}` `  ``// Function to print all numbers upto``  ``// N having product of digits equal to K``  ``static` `void` `productOfDigitsK(``int` `N, ``int` `K)``  ``{``    ``// Stores whether any number satisfying``    ``// the given conditions exists or not``    ``int` `flag = ``0``;` `    ``// Iterate over the range [1, N]``    ``for` `(``int` `i = ``1``; i <= N; ++i) {` `      ``// If product of digits of``      ``// arr[i] is equal to K or not``      ``if` `(K == productOfDigits(i)) {` `        ``// Print that number``        ``System.out.print(i + ``" "``);``        ``flag = ``1``;``      ``}``    ``}` `    ``// If no numbers are found``    ``if` `(flag == ``0``)``      ``System.out.println(-``1``);``  ``}` `  ``// Driver Code``  ``public` `static` `void` `main(String[] args)``  ``{``    ` `    ``// Given value of N & K``    ``int` `N = ``500``, K = ``10``;` `    ``// Function call to print all numbers``    ``// from [1, N] with product of digits K``    ``productOfDigitsK(N, K);``  ``}``}` `// This code is contribute by Kingash.`

## Python3

 `# Python3 program for the above approach` `# Function to find the product``# of digits of a number``def` `productOfDigits(N) :` `    ``# Stores the product of``    ``# digits of a number``    ``product ``=` `1``;` `    ``while` `(N !``=` `0``) :``        ``product ``=` `product ``*` `(N ``%` `10``);``        ``N ``=` `N ``/``/` `10``;` `    ``# Return the product``    ``return` `product;` `# Function to print all numbers upto``# N having product of digits equal to K``def` `productOfDigitsK(N, K) :` `    ``# Stores whether any number satisfying``    ``# the given conditions exists or not``    ``flag ``=` `0``;` `    ``# Iterate over the range [1, N]``    ``for` `i ``in` `range``(``1``, N ``+` `1``) :` `        ``# If product of digits of``        ``# arr[i] is equal to K or not``        ``if` `(K ``=``=` `productOfDigits(i)) :` `            ``# Print that number``            ``print``(i, end ``=``" "``);``            ``flag ``=` `1``;` `    ``# If no numbers are found``    ``if` `(flag ``=``=` `0``) :``        ``print``(``"-1"``);` `# Driver Code``if` `__name__ ``=``=` `"__main__"` `:``    ` `    ``# Given value of N & K``    ``N ``=` `500``; K ``=` `10``;` `    ``# Function call to print all numbers``    ``# from [1, N] with product of digits K``    ``productOfDigitsK(N, K);``    ` `    ``# This code is contributed by AnkThon`

## C#

 `// C# program for the above approach``using` `System;``class` `GFG``{` `  ``// Function to find the product``  ``// of digits of a number``  ``static` `int` `productOfDigits(``int` `N)``  ``{` `    ``// Stores the product of``    ``// digits of a number``    ``int` `product = 1;` `    ``while` `(N != 0) {``      ``product = product * (N % 10);``      ``N = N / 10;``    ``}` `    ``// Return the product``    ``return` `product;``  ``}` `  ``// Function to print all numbers upto``  ``// N having product of digits equal to K``  ``static` `void` `productOfDigitsK(``int` `N, ``int` `K)``  ``{` `    ``// Stores whether any number satisfying``    ``// the given conditions exists or not``    ``int` `flag = 0;` `    ``// Iterate over the range [1, N]``    ``for` `(``int` `i = 1; i <= N; ++i) {` `      ``// If product of digits of``      ``// arr[i] is equal to K or not``      ``if` `(K == productOfDigits(i)) {` `        ``// Print that number``        ``Console.Write(i + ``" "``);``        ``flag = 1;``      ``}``    ``}` `    ``// If no numbers are found``    ``if` `(flag == 0)``      ``Console.WriteLine(-1);``  ``}`  `  ``// Driver Code``  ``static` `public` `void` `Main()``  ``{` `    ``// Given value of N & K``    ``int` `N = 500, K = 10;` `    ``// Function call to print all numbers``    ``// from [1, N] with product of digits K``    ``productOfDigitsK(N, K);``  ``}``}` `// This code is contributed by jana_sayantan.`
Output
`25 52 125 152 215 251 `

Time Complexity: O(N * logN)
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