Check if a number can be represented as the sum of numbers with at least one digit equal to K

• Difficulty Level : Medium
• Last Updated : 26 Oct, 2021

Given integers N and K, the task is to check if a number can be represented as the sum of numbers that have at least one digit equal to K.

Example:

Input: N = 68, K = 7
Output: YES
Explanation: 68 = (27 + 17 + 17 + 7). Each number has atleast one digit equal to 7.

Input: N = 23, K = 3
Output: YES
Explanation: 23 itself contains a digit equal to 3.

Approach: The given problem can be solved by using simple concepts of math. Follow the steps below to solve the problem:

• Initialize a variable temp to k, and also take a counter say count, assign it with 0
• Iterate till the last digits of temp and N are not equal and at each iteration
• Increment the value of temp by k
• Keep a count of iterations and break the loop if the count becomes greater than 10
• Check if the last digits of temp and N are equal, and if the value of temp <= N:
• If the above condition is satisfied return true
• Else return false
• Also if k * 10 <= N, return true
• Else return false

Below is the implementation of the above approach:

C++

 // C++ implementation for the above approach #include using namespace std; // Function to Check if a number can// be equal to sum of numbers having// at least one digit equal to kbool checkEqualtoSum(int N, int k){    // Temporary variable to    // store k    int temp = k;         // Variable for count    int count = 0;         // Iterating till count is less or    // equal to 10 and N % 10 is not    // equal to temp % 10    while(count <= 10 &&                  N % 10 != temp % 10) {               temp += k;        count++;    }         // If N % 10 is equal to temp % 10    // and temp is less or equal to N,    // return true    if(N % 10 == temp % 10 && temp <= N)        return true;         // If k * 10 <= N, return true    if(k * 10 <= N)        return true;         // Else return false    return false;} // Driver Codeint main(){    int N = 68;    int K = 7;       // Call the function    if(checkEqualtoSum(N, K))          cout << "YES";    else cout << "NO";         return 0;}

Java

 // Java program for the above approachimport java.io.*;class GFG {     // Function to Check if a number can    // be equal to sum of numbers having    // at least one digit equal to k    static boolean checkEqualtoSum(int N, int k)    {        // Temporary variable to        // store k        int temp = k;         // Variable for count        int count = 0;         // Iterating till count is less or        // equal to 10 and N % 10 is not        // equal to temp % 10        while (count <= 10 && N % 10 != temp % 10) {             temp += k;            count++;        }         // If N % 10 is equal to temp % 10        // and temp is less or equal to N,        // return true        if (N % 10 == temp % 10 && temp <= N)            return true;         // If k * 10 <= N, return true        if (k * 10 <= N)            return true;         // Else return false        return false;    }     // Driver Code    public static void main(String[] args)    {        // Given Input        int N = 68;        int K = 7;         // Call the function        if (checkEqualtoSum(N, K))            System.out.println("YES");        else            System.out.println("NO");    }} // This code is contributed by dwivediyash

Python3

 # python implementation for the above approach # Function to Check if a number can# be equal to sum of numbers having# at least one digit equal to k  def checkEqualtoSum(N, k):     # Temporary variable to    # store k    temp = k     # Variable for count    count = 0     # Iterating till count is less or    # equal to 10 and N % 10 is not    # equal to temp % 10    while(count <= 10 and N % 10 != temp % 10):         temp += k        count += 1     # If N % 10 is equal to temp % 10    # and temp is less or equal to N,    # return true    if(N % 10 == temp % 10 and temp <= N):        return True     # If k * 10 <= N, return true    if(k * 10 <= N):        return True     # Else return false    return False  # Driver Codeif __name__ == "__main__":     N = 68    K = 7     # Call the function    if(checkEqualtoSum(N, K)):        print("YES")    else:        print("NO")     # This code is contributed by rakeshsahni



C#

 // C# implementation for the above approachusing System;class gFG{       // Function to Check if a number can    // be equal to sum of numbers having    // at least one digit equal to k    static bool checkEqualtoSum(int N, int k)    {        // Temporary variable to        // store k        int temp = k;         // Variable for count        int count = 0;         // Iterating till count is less or        // equal to 10 and N % 10 is not        // equal to temp % 10        while (count <= 10 && N % 10 != temp % 10) {             temp += k;            count++;        }         // If N % 10 is equal to temp % 10        // and temp is less or equal to N,        // return true        if (N % 10 == temp % 10 && temp <= N)            return true;         // If k * 10 <= N, return true        if (k * 10 <= N)            return true;         // Else return false        return false;    }     // Driver Code    public static void Main()    {        int N = 68;        int K = 7;         // Call the function        if (checkEqualtoSum(N, K))            Console.WriteLine("YES");        else            Console.WriteLine("NO");    }} // This code is contributed by ukasp.

Output
YES

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up