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++ 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 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
# 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
<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# 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)