 Open in App
Not now

# Find two numbers whose sum is N and does not contain any digit as K

• Last Updated : 21 Apr, 2021

Given an integer N, the task is to find two numbers a and b such that a + b = N, where a and b doesn’t contain any of the digits as K. Print -1 if not possible.

Examples:

Input: N = 100, K = 0
Output: 1 99
Explanation:
1 + 99 = 100 and none of the numbers has 0 in it.

Input: N = 123456789, K = 2
Output: 3456790 119999999
Explanation:
3456790 + 119999999 = 123456789 and none of the numbers has 2 in it.

Approach: The idea is to iterate a loop from i = 1 to n-1, and check if i and (n – i) do not contain K. If it doesn’t contain any digit as then print the two numbers and break out of the loop.

For Example: N = 11, k = 0
i = 1, N – 1 = 10 but 10 contains 0, so increment i
i = 2, N – 1 = 9, so print this i and n – i.

Below is the implementation of the above approach:

## C++

 `// C++ program for``// the above approach``#include``using` `namespace` `std;` `int` `freqCount(string str, ``char` `k)``{``    ``int` `count = 0;``    ``for``(``int` `i = 0;``            ``i < str.size(); i++)``    ``{``        ``if` `(str[i] == k)``        ``count++;``    ``}``    ``return` `count;``}` `// Function to find two``// numbers whose sum``// is N and do not``// contain any digit as k``void` `findAandB(``int` `n, ``int` `k)``{``    ``int` `flag = 0;``    ` `    ``// Check every number i and (n-i)``    ``for``(``int` `i = 1; i < n; i++)``    ``{``        ``// Check if i and n-i doesn't``        ``// contain k in them print i and n-i``        ``if` `(freqCount(to_string(i),``                     ``(``char``)(k + 48)) == 0 and``            ``freqCount(to_string(n - i),``                     ``(``char``)(k + 48)) == 0)``        ``{``            ``cout << ``"("` `<< i << ``", "``                 ``<< n - i << ``")"``;``            ``flag = 1;``            ``break``;``        ``}``    ``}``    ` `    ``// Check if flag is 0``    ``// then print -1``    ``if` `(flag == 0)``        ``cout << -1;``}` `// Driver Code``int` `main()``{``    ` `    ``// Given N and K``    ``int` `N = 100;``    ``int` `K = 0;``    ` `    ``// Function call``    ``findAandB(N, K);``    ``return` `0;``}` `// This code is contributed by Rajput-Ji`

## Java

 `// Java program for the above approach``import` `java.util.*;` `class` `GFG{` `static` `int` `freqCount(String str, ``char` `k)``{``    ``int` `count = ``0``;``    ``for``(``int` `i = ``0``; i < str.length(); i++)``    ``{``        ``if` `(str.charAt(i) == k)``            ``count++;``    ``}``    ``return` `count;``}` `// Function to find two numbers``// whose sum is N and do not``// contain any digit as k``static` `void` `findAandB(``int` `n, ``int` `k)``{``    ``int` `flag = ``0``;` `    ``// Check every number i and (n-i)``    ``for``(``int` `i = ``1``; i < n; i++)``    ``{``        ` `        ``// Check if i and n-i doesn't``        ``// contain k in them print i and n-i``        ``if` `(freqCount(Integer.toString(i),``                     ``(``char``)(k + ``48``)) == ``0` `&&``            ``freqCount(Integer.toString(n - i),``                     ``(``char``)(k + ``48``)) == ``0``)``        ``{``            ``System.out.print(``"("` `+ i + ``", "` `+``                              ``(n - i) + ``")"``);``            ``flag = ``1``;``            ``break``;``        ``}``    ``}` `    ``// Check if flag is 0``    ``// then print -1``    ``if` `(flag == ``0``)``        ``System.out.print(-``1``);``}` `// Driver code``public` `static` `void` `main(String[] args)``{` `    ``// Given N and K``    ``int` `N = ``100``;``    ``int` `K = ``0``;` `    ``// Function call``    ``findAandB(N, K);``}``}` `// This code is contributed by offbeat`

## Python

 `# Python program for the above approach` `# Function to find two numbers whose sum``# is N and do not contain any digit as k``def` `findAandB(n, k):``  ` `    ``flag ``=` `0` `    ``# Check every number i and (n-i)``    ``for` `i ``in` `range``(``1``, n):` `        ``# Check if i and n-i doesn't``        ``# contain k in them print i and n-i``        ``if` `str``(i).count(``chr``(k ``+` `48``)) ``=``=` `0` `\``        ``and` `str``(n``-``i).count(``chr``(k ``+` `48``)) ``=``=` `0``:``            ``print``(i, n``-``i)``            ``flag ``=` `1``            ``break` `    ``# check if flag is 0 then print -1``    ``if``(flag ``=``=` `0``):``        ``print``(``-``1``)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``  ` `  ``# Given N and K``    ``N ``=` `100``    ``K ``=` `0``    ` `    ``# Function Call``    ``findAandB(N, K)`

## C#

 `// C# program for the``// above approach``using` `System;``class` `GFG{` `static` `int` `freqCount(String str,``                     ``char` `k)``{``  ``int` `count = 0;``  ` `  ``for``(``int` `i = 0; i < str.Length; i++)``  ``{``    ``if` `(str[i] == k)``      ``count++;``  ``}``  ` `  ``return` `count;``}` `// Function to find two numbers``// whose sum is N and do not``// contain any digit as k``static` `void` `findAandB(``int` `n, ``int` `k)``{``  ``int` `flag = 0;` `  ``// Check every number i and (n-i)``  ``for``(``int` `i = 1; i < n; i++)``  ``{``    ``// Check if i and n-i doesn't``    ``// contain k in them print i and n-i``    ``if` `(freqCount(i.ToString(),``                 ``(``char``)(k + 48)) == 0 &&``        ``freqCount((n-i).ToString(),``                  ``(``char``)(k + 48)) == 0)``    ``{``      ``Console.Write(``"("` `+ i + ``", "` `+``                    ``(n - i) + ``")"``);``      ``flag = 1;``      ``break``;``    ``}``  ``}` `  ``// Check if flag is 0``  ``// then print -1``  ``if` `(flag == 0)``    ``Console.Write(-1);``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``  ``// Given N and K``  ``int` `N = 100;``  ``int` `K = 0;` `  ``// Function call``  ``findAandB(N, K);``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output:

`(1, 99)`

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

My Personal Notes arrow_drop_up