Skip to content
Related Articles
Open in App
Not now

Related Articles

Divide a number into two parts

Improve Article
Save Article
  • Difficulty Level : Basic
  • Last Updated : 19 Oct, 2022
Improve Article
Save Article

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 

 

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 <bits/stdc++.h>
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




<?php
// PHP implementation of the approach
 
// Function to print the two parts
function 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
?>

Javascript




<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>

Output: 

9331 110

 

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


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!