# 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;``}`

## Java

 `public` `class` `GFG {``    ``// Function to print the two parts``    ``static` `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 give sum as n``                ``if` `(i + j == n) {``                    ``// Convert both numbers to strings to check whether they contain 4 or not``                    ``String a = Integer.toString(i);``                    ``String b = Integer.toString(j);` `                    ``// This will tell if at least one number contains 4 or not``                    ``boolean` `temp = ``true``;` `                    ``// Check if the first number contains 4 or not``                    ``for` `(``int` `k = ``0``; k < a.length(); k++) {``                        ``if` `(a.charAt(k) == ``'4'``) {``                            ``temp = ``false``;``                            ``break``;``                        ``}``                    ``}` `                    ``// Check if the second number contains 4 or not``                    ``for` `(``int` `k = ``0``; k < b.length(); k++) {``                        ``if` `(b.charAt(k) == ``'4'``) {``                            ``temp = ``false``;``                            ``break``;``                        ``}``                    ``}` `                    ``// If both numbers don't contain 4``                    ``if` `(temp == ``true``) {``                        ``System.out.println(i + ``" "` `+ j);``                        ``return``;``                    ``}``                ``}``            ``}``        ``}``    ``}` `    ``// Driver Code``    ``public` `static` `void` `main(String[] args) {``        ``int` `N = ``9441``;``        ``twoParts(N);``    ``}``}`

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

## C#

 `using` `System;``public` `class` `GFG``{``    ``// Function to print the two parts``    ``static` `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 give sum as n``                ``if` `(i + j == n)``                ``{``                    ``// Convert both numbers to strings to check whether they contain 4 or not``                    ``string` `a = i.ToString();``                    ``string` `b = j.ToString();` `                    ``// This will tell if at least one number contains 4 or not``                    ``bool` `temp = ``true``;` `                    ``// Check if the first number contains 4 or not``                    ``for` `(``int` `k = 0; k < a.Length; k++)``                    ``{``                        ``if` `(a[k] == ``'4'``)``                        ``{``                            ``temp = ``false``;``                            ``break``;``                        ``}``                    ``}` `                    ``// Check if the second number contains 4 or not``                    ``for` `(``int` `k = 0; k < b.Length; k++)``                    ``{``                        ``if` `(b[k] == ``'4'``)``                        ``{``                            ``temp = ``false``;``                            ``break``;``                        ``}``                    ``}` `                    ``// If both numbers don't contain 4``                    ``if` `(temp == ``true``)``                    ``{``                        ``Console.WriteLine(i + ``" "` `+ j);``                        ``return``;``                    ``}``                ``}``            ``}``        ``}``    ``}` `    ``// Driver Code``    ``public` `static` `void` `Main(``string``[] args)``    ``{``        ``int` `N = 9441;``        ``TwoParts(N);``    ``}``}`

## Javascript

 `// Function to print the two parts``function` `twoParts(n) {``  ` `    ``// Run loop to pick two numbers``    ``for` `(let i = 1; i <= n; i++) {``        ``for` `(let j = 1; j <= n; j++) {``          ` `            ``// When both numbers give sum as n``            ``if` `(i + j === n) {``              ` `                ``// Convert both numbers to strings to check whether they contain 4 or not``                ``const a = i.toString();``                ``const b = j.toString();` `                ``// This will tell if at least one number contains 4 or not``                ``let temp = ``true``;` `                ``// Check if the first number contains 4 or not``                ``for` `(let k = 0; k < a.length; k++) {``                    ``if` `(a[k] === ``'4'``) {``                        ``temp = ``false``;``                        ``break``;``                    ``}``                ``}` `                ``// Check if the second number contains 4 or not``                ``for` `(let k = 0; k < b.length; k++) {``                    ``if` `(b[k] === ``'4'``) {``                        ``temp = ``false``;``                        ``break``;``                    ``}``                ``}` `                ``// If both numbers don't contain 4``                ``if` `(temp === ``true``) {``                    ``console.log(i + ``" "` `+ j);``                    ``return``;``                ``}``            ``}``        ``}``    ``}``}` `// Driver Code``const 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`

## Javascript

 ``

## PHP

 ``

Output
```9331 110

```

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

Previous
Next