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 = 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++
// 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)
Please Login to comment...