Wednesday, July 3, 2024
HomeData ModellingData Structure & AlgorithmCheck if a number can be represented as the sum of numbers...

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

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 <bits/stdc++.h>
using namespace std;
 
// Function to Check if a number can
// be equal to sum of numbers having
// at least one digit equal to k
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
int 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 approach
import 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 Code
if __name__ == "__main__":
 
    N = 68
    K = 7
 
    # Call the function
    if(checkEqualtoSum(N, K)):
        print("YES")
    else:
        print("NO")
 
    # This code is contributed by rakeshsahni


Javascript




<script>
    // JavaScript 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
    const checkEqualtoSum = (N, k) => {
        // Temporary variable to
        // store k
        let temp = k;
 
        // Variable for count
        let 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
    let N = 68;
    let K = 7;
 
    // Call the function
    if (checkEqualtoSum(N, K))
        document.write("YES");
    else document.write("NO");
 
    // This code is contributed by rakeshsahni
 
</script>


C#




// C# implementation for the above approach
using 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)

 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Nicole Veronica Rubhabha
Nicole Veronica Rubhabha
A highly competent and organized individual DotNet developer with a track record of architecting and developing web client-server applications. Recognized as a personable, dedicated performer who demonstrates innovation, communication, and teamwork to ensure quality and timely project completion. Expertise in C#, ASP.Net, MVC, LINQ, EF 6, Web Services, SQL Server, MySql, Web development,
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments