GFG App
Open App
Browser
Continue

# Divide a number into two parts

Given an integer N containing the digit 4 at least once. The task is to divide the number into two parts x1 and x2 such that:

• x1 + x2 = N.
• And none of the parts contain the digit 4.

Note that there may be multiple answers.

Examples:

Input: N = 4
Output: 1 3
1 + 3 = 4

Input: N = 9441
Output: 9331 110
9331 + 110 = 9441

Naive Approach: The idea is to run two nested for loops and pick two numbers whose sum is n and they do not have any digit equal to 4. Below are the steps:

• Run two nested for loops from 1 to N.
• If both the numbers from that nested for loops sum to N then,
• Convert both the number into strings to check whether they contain ‘4’ or not
• Declare a boolean variable temp with the value true
• Now check for both the strings and if any one of the strings contains ‘4’, then make temp as false
• In last if the temp is false then at least one number contains 4 else print those numbers

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach` `#include ` `using` `namespace` `std;`   `// Function to print the two parts` `void` `twoParts(``int` `n)` `{` `    ``// Run loop to pick two numbers` `    ``for` `(``int` `i = 1; i <= n; i++) {`   `        ``for` `(``int` `j = 1; j <= n; j++) {`   `            ``// When both numbers gives sum as n` `            ``if` `(i + j == n) {` `              `  `                ``// convert both number in` `                ``// string to check whether` `                ``// they contain 4 or not` `                ``string a = to_string(i);` `                ``string b = to_string(j);`   `                ``// This will tell that at` `                ``// least one number` `                ``// contains 4 or not` `                ``bool` `temp = ``true``;`   `                ``// Check first number contain` `                ``// 4 or not` `                ``for` `(``int` `k = 0; k < a.size(); k++) {` `                    ``if` `(a[k] == ``'4'``) {` `                        ``temp = ``false``;` `                        ``break``;` `                    ``}` `                ``}`   `                ``// check second number` `                ``// contain 4 or not` `                ``for` `(``int` `k = 0; k < b.size(); k++) {` `                    ``if` `(b[k] == ``'4'``) {` `                        ``temp = ``false``;` `                        ``break``;` `                    ``}` `                ``}`   `                ``// If both the number doesn't` `                ``// contain 4` `                ``if` `(temp == ``true``) {` `                    ``cout << i << ``" "` `<< j << endl;` `                    ``return``;` `                ``}` `            ``}` `        ``}` `    ``}` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 9441;` `    ``twoParts(N);` `    ``return` `0;` `}`

## Python3

 `def` `twoParts(n):` `    ``# Run loop to pick two numbers` `    ``for` `i ``in` `range``(``1``, n``+``1``):` `        ``for` `j ``in` `range``(``1``, n``+``1``):` `            ``# When both numbers gives sum as n` `            ``if` `i ``+` `j ``=``=` `n:` `                ``# convert both number in` `                ``# string to check whether` `                ``# they contain 4 or not` `                ``a ``=` `str``(i)` `                ``b ``=` `str``(j)`   `                ``# This will tell that at` `                ``# least one number` `                ``# contains 4 or not` `                ``temp ``=` `True`   `                ``# Check first number contain` `                ``# 4 or not` `                ``for` `k ``in` `range``(``len``(a)):` `                    ``if` `a[k] ``=``=` `'4'``:` `                        ``temp ``=` `False` `                        ``break`   `                ``# check second number` `                ``# contain 4 or not` `                ``for` `k ``in` `range``(``len``(b)):` `                    ``if` `b[k] ``=``=` `'4'``:` `                        ``temp ``=` `False` `                        ``break`   `                ``# If both the number doesn't` `                ``# contain 4` `                ``if` `temp ``=``=` `True``:` `                    ``print``(i, j)` `                    ``return`     `N ``=` `9441` `twoParts(N)`

Output-

`50 9391`

Time Complexity: O(N2*maximum length of any number), because of two nested for loops and loop for checking whether any number contains 4 or not
Auxiliary Space: O(1), because no extra space has been used

Approach: Since number can be too large take the number as string. Divide it into two strings:

• For string 1, find all the positions of digit 4 in the string change it to 3 we can also change it to another number.
• For the second string put 1 at all positions of digit 4 and put 0 at all remaining positions from the 1st position of digit 4 to the end of the string.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach` `#include ` `using` `namespace` `std;`   `// Function to print the two parts` `void` `twoParts(string str)` `{` `    ``int` `flag = 0;` `    ``string a = ``""``;`   `    ``// Find the position of 4` `    ``for` `(``int` `i = 0; i < str.length(); i++) {` `        ``if` `(str[i] == ``'4'``) {` `            ``str[i] = ``'3'``;` `            ``a += ``'1'``;` `            ``flag = 1;` `        ``}`   `        ``// If current character is not '4'` `        ``// but appears after the first` `        ``// occurrence of '4'` `        ``else` `if` `(flag)` `            ``a += ``'0'``;` `    ``}`   `    ``// Print both the parts` `    ``cout << str << ``" "` `<< a;` `}`   `// Driver code` `int` `main()` `{` `    ``string str = ``"9441"``;` `    ``twoParts(str);`   `    ``return` `0;` `}`

## Java

 `// Java implementation of the approach` `class` `GfG {`   `    ``// Function to print the two parts` `    ``static` `void` `twoParts(String str)` `    ``{` `        ``int` `flag = ``0``;` `        ``String a = ``""``;` `        ``char``[] gfg = str.toCharArray();`   `        ``// Find the position of 4` `        ``for` `(``int` `i = ``0``; i < str.length(); i++) {` `            ``if` `(gfg[i] == ``'4'``) {` `                ``gfg[i] = ``'3'``;` `                ``a += ``'1'``;` `                ``flag = ``1``;` `            ``}`   `            ``// If current character is not '4'` `            ``// but appears after the first` `            ``// occurrence of '4'` `            ``else` `if` `(flag != ``0``)` `                ``a += ``'0'``;` `        ``}`   `        ``str = ``new` `String(gfg);`   `        ``// Print both the parts` `        ``System.out.print(str + ``" "` `+ a);` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``String str = ``"9441"``;` `        ``twoParts(str);` `    ``}` `}`   `// This code is contributed by Rituraj Jain`

## Python3

 `# Python3 implementation of the approach`   `# Function to print the two parts`     `def` `twoParts(string):`   `    ``flag ``=` `0` `    ``a ``=` `""`   `    ``# Find the position of 4` `    ``for` `i ``in` `range``(``len``(string)):`   `        ``if` `(string[i] ``=``=` `'4'``):` `            ``string[i] ``=` `'3'` `            ``a ``+``=` `'1'` `            ``flag ``=` `1`   `        ``# If current character is not '4'` `        ``# but appears after the first` `        ``# occurrence of '4'` `        ``elif` `(flag):` `            ``a ``+``=` `'0'`   `    ``string ``=` `"".join(string)`   `    ``# Print both the parts` `    ``print``(string, a)`     `# Driver code` `if` `__name__ ``=``=` `"__main__"``:`   `    ``string ``=` `"9441"`   `    ``twoParts(``list``(string))`   `# This code is contributed by Ryuga`

## C#

 `// C# implementation of the approach` `using` `System;`   `class` `GfG {`   `    ``// Function to print the two parts` `    ``static` `void` `twoParts(``string` `str)` `    ``{` `        ``int` `flag = 0;` `        ``string` `a = ``""``;` `        ``char``[] gfg = str.ToCharArray();`   `        ``// Find the position of 4` `        ``for` `(``int` `i = 0; i < str.Length; i++) {` `            ``if` `(gfg[i] == ``'4'``) {` `                ``gfg[i] = ``'3'``;` `                ``a += ``'1'``;` `                ``flag = 1;` `            ``}`   `            ``// If current character is not '4'` `            ``// but appears after the first` `            ``// occurrence of '4'` `            ``else` `if` `(flag != 0)` `                ``a += ``'0'``;` `        ``}`   `        ``str = ``new` `String(gfg);`   `        ``// Print both the parts` `        ``Console.WriteLine(str + ``" "` `+ a);` `    ``}`   `    ``// Driver code` `    ``static` `void` `Main()` `    ``{` `        ``string` `str = ``"9441"``;` `        ``twoParts(str);` `    ``}` `}`   `// This code is contributed by mits`

## PHP

 ``

## Javascript

 ``

Output:

`9331 110`

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

My Personal Notes arrow_drop_up