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++
#include <bits/stdc++.h>
using namespace std;
void twoParts( int n)
{
for ( int i = 1; i <= n; i++) {
for ( int j = 1; j <= n; j++) {
if (i + j == n) {
string a = to_string(i);
string b = to_string(j);
bool temp = true ;
for ( int k = 0; k < a.size(); k++) {
if (a[k] == '4' ) {
temp = false ;
break ;
}
}
for ( int k = 0; k < b.size(); k++) {
if (b[k] == '4' ) {
temp = false ;
break ;
}
}
if (temp == true ) {
cout << i << " " << j << endl;
return ;
}
}
}
}
}
int main()
{
int N = 9441;
twoParts(N);
return 0;
}
|
Java
public class GFG {
static void twoParts( int n) {
for ( int i = 1 ; i <= n; i++) {
for ( int j = 1 ; j <= n; j++) {
if (i + j == n) {
String a = Integer.toString(i);
String b = Integer.toString(j);
boolean temp = true ;
for ( int k = 0 ; k < a.length(); k++) {
if (a.charAt(k) == '4' ) {
temp = false ;
break ;
}
}
for ( int k = 0 ; k < b.length(); k++) {
if (b.charAt(k) == '4' ) {
temp = false ;
break ;
}
}
if (temp == true ) {
System.out.println(i + " " + j);
return ;
}
}
}
}
}
public static void main(String[] args) {
int N = 9441 ;
twoParts(N);
}
}
|
Python3
def twoParts(n):
for i in range ( 1 , n + 1 ):
for j in range ( 1 , n + 1 ):
if i + j = = n:
a = str (i)
b = str (j)
temp = True
for k in range ( len (a)):
if a[k] = = '4' :
temp = False
break
for k in range ( len (b)):
if b[k] = = '4' :
temp = False
break
if temp = = True :
print (i, j)
return
N = 9441
twoParts(N)
|
C#
using System;
public class GFG
{
static void TwoParts( int n)
{
for ( int i = 1; i <= n; i++)
{
for ( int j = 1; j <= n; j++)
{
if (i + j == n)
{
string a = i.ToString();
string b = j.ToString();
bool temp = true ;
for ( int k = 0; k < a.Length; k++)
{
if (a[k] == '4' )
{
temp = false ;
break ;
}
}
for ( int k = 0; k < b.Length; k++)
{
if (b[k] == '4' )
{
temp = false ;
break ;
}
}
if (temp == true )
{
Console.WriteLine(i + " " + j);
return ;
}
}
}
}
}
public static void Main( string [] args)
{
int N = 9441;
TwoParts(N);
}
}
|
Javascript
function twoParts(n) {
for (let i = 1; i <= n; i++) {
for (let j = 1; j <= n; j++) {
if (i + j === n) {
const a = i.toString();
const b = j.toString();
let temp = true ;
for (let k = 0; k < a.length; k++) {
if (a[k] === '4' ) {
temp = false ;
break ;
}
}
for (let k = 0; k < b.length; k++) {
if (b[k] === '4' ) {
temp = false ;
break ;
}
}
if (temp === true ) {
console.log(i + " " + j);
return ;
}
}
}
}
}
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++
#include <bits/stdc++.h>
using namespace std;
void twoParts(string str)
{
int flag = 0;
string a = "" ;
for ( int i = 0; i < str.length(); i++) {
if (str[i] == '4' ) {
str[i] = '3' ;
a += '1' ;
flag = 1;
}
else if (flag)
a += '0' ;
}
cout << str << " " << a;
}
int main()
{
string str = "9441" ;
twoParts(str);
return 0;
}
|
Java
class GfG {
static void twoParts(String str)
{
int flag = 0 ;
String a = "" ;
char [] gfg = str.toCharArray();
for ( int i = 0 ; i < str.length(); i++) {
if (gfg[i] == '4' ) {
gfg[i] = '3' ;
a += '1' ;
flag = 1 ;
}
else if (flag != 0 )
a += '0' ;
}
str = new String(gfg);
System.out.print(str + " " + a);
}
public static void main(String[] args)
{
String str = "9441" ;
twoParts(str);
}
}
|
Python3
def twoParts(string):
flag = 0
a = ""
for i in range ( len (string)):
if (string[i] = = '4' ):
string[i] = '3'
a + = '1'
flag = 1
elif (flag):
a + = '0'
string = "".join(string)
print (string, a)
if __name__ = = "__main__" :
string = "9441"
twoParts( list (string))
|
C#
using System;
class GfG {
static void twoParts( string str)
{
int flag = 0;
string a = "" ;
char [] gfg = str.ToCharArray();
for ( int i = 0; i < str.Length; i++) {
if (gfg[i] == '4' ) {
gfg[i] = '3' ;
a += '1' ;
flag = 1;
}
else if (flag != 0)
a += '0' ;
}
str = new String(gfg);
Console.WriteLine(str + " " + a);
}
static void Main()
{
string str = "9441" ;
twoParts(str);
}
}
|
Javascript
<script>
function twoParts( str)
{
var flag = 0;
var a = "" ;
var gfg = str.split( '' ) ;
for ( var i = 0; i < str.length; i++)
{
if (gfg[i] == '4' )
{
gfg[i] = '3' ;
a += '1' ;
flag = 1;
}
else if (flag != 0)
a += '0' ;
}
document.write(gfg.join( '' ) + " " + a);
}
var str = "9441" ;
twoParts(str);
</script>
|
PHP
<?php
function twoParts( $str )
{
$flag = 0;
$a = "" ;
for ( $i = 0; $i < strlen ( $str ); $i ++)
{
if ( $str [ $i ] == '4' )
{
$str [ $i ] = '3' ;
$a .= '1' ;
$flag = 1;
}
else if ( $flag )
$a .= '0' ;
}
echo $str . " " . $a ;
}
$str = "9441" ;
twoParts( $str );
?>
|
Time Complexity: O(N)
Auxiliary Space: O(N)
Last Updated :
07 Jan, 2024
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...