Divide a number into two parts - GeeksforGeeks

28 Mar, 2022
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 = 4Input: N = 9441 Output: 9331 110 9331 + 110 = 9441  
 
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++
Java
Python3
C#
PHP
Javascript
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std; // Function to print the two partsvoid 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 codeint main(){    string str = "9441";    twoParts(str);     return 0;}
// Java implementation of the approachclass 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 implementation of the approach # Function to print the two partsdef 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 codeif __name__ == "__main__" :     string = "9441";         twoParts(list(string)); # This code is contributed by Ryuga
// C# implementation of the approachusing 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// PHP implementation of the approach // Function to print the two partsfunction twoParts($str){    $flag = 0;    $a = "";     // Find the position of 4    for ($i = 0; $i < strlen($str); $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    echo $str . " " . $a;} // Driver code$str = "9441";twoParts($str); // This code is contributed by mits?>
<script>// javascript implementation of the approach        // Function to print the two parts     function twoParts( str)    {        var flag = 0;        var a = "";        var gfg = str.split('') ;               // Find the position of 4        for (var 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';        }                          // Print both the parts        document.write(gfg.join('') + " " + a);    }       // Driver code         var str = "9441";        twoParts(str);                 // This code is contributed by bunnyram19.        </script>
9331 110
 
Time Complexity: O(N)Auxiliary Space: O(1)
ankthon
rituraj_jain
Mithun Kumar
bunnyram19
rohitsingh07052
Constructive Algorithms
Numbers
Greedy
Mathematical
Strings
Strings
Greedy
Mathematical
Numbers
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Huffman Coding | Greedy Algo-3
Coin Change | DP-7
Program for Shortest Job First (or SJF) CPU Scheduling | Set 1 (Non- preemptive)
Fractional Knapsack Problem
Activity Selection Problem | Greedy Algo-1
Program for Fibonacci numbers
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7
Merge two sorted arrays