Given a string S of size N representing a large integer value, and a positive digit X, the task is to print the largest integer formed by inserting the digit X in the string S.
Examples:
Input: S = “99”, X = 9
Output: 999
Explanation:
The largest number that can be formed is 999 after inserting 9 into “99”.Input: S = “-13”, X = 2
Output: -123
Explanation:
The largest number that can be formed is -123 after inserting 2 into “-13”.
Approach: The problem can be solved by iterating over the character of the string S. Follow the steps below to solve this problem:
- If the number S is positive, then perform the following steps:
-
Iterate in the range [0, N-1] using the variable i and perform the following steps:
- If S[i] is less than X then insert the digit X before S[i] and break the loop.
- If none of the above cases satisfy, then append the digit X at the end of the string S.
-
Iterate in the range [0, N-1] using the variable i and perform the following steps:
- Else, if the number S is negative, then perform the following steps:
-
Iterate in the range [0, N-1] in using the variable i and perform the following steps:
- If S[i] is less than X, then insert the digit X before S[i] and break the loop.
- If none of the above cases satisfy, then append the digit X at the end of the string S.
-
Iterate in the range [0, N-1] in using the variable i and perform the following steps:
- Finally, print the largest possible string, represented by S.
Below is the implementation of the above approach:
// C++ code for the above JavaScript program #include <bits/stdc++.h> using namespace std;
// Function to find Largest Number after // insertion of a digit string largestValue(string S, int X)
{ // If S is negative
if (S[0] == '-' ) {
int f = 0;
// Iterate through characters of S
for ( int i = 0; i < S.length(); i++) {
char val = S[i];
if (i == 0) {
continue ;
}
// If digit x is less
// than S[i] insert digit
// after X
if (X < val - '0' ) {
f = 1;
S = S.substr(0, i) + to_string(X)
+ S.substr(i);
break ;
}
}
if (f == 0) {
S = S + to_string(X);
}
}
// If S is positive
else {
int f = 0;
// If x > S[i] insert x
for ( int i = 0; i < S.length(); i++) {
char val = S[i];
if (X > val - '0' ) {
f = 1;
S = S.substr(0, i) + to_string(X)
+ S.substr(i);
break ;
}
}
if (f == 0) {
S = S + to_string(X);
}
}
// Return the answer
return S;
} // Driver Code int main()
{ // Given Input
string S = "-13" ;
int X = 2;
// Function Call
cout << largestValue(S, X) << endl;
return 0;
} // This code is contributed by phasing17. |
// Java code for the above approach import java.io.*;
import java.util.*;
class GFG {
// Function to find Largest Number after
// insertion of a digit
public static String largestValue(String S, int X)
{
// If S is negative
if (S.charAt( 0 ) == '-' ) {
int f = 0 ;
// Iterate through characters of S
for ( int i = 0 ; i < S.length(); i++) {
char val = S.charAt(i);
if (i == 0 ) {
continue ;
}
// If digit X is less
// than S[i] insert digit
// after X
if (X < Character.getNumericValue(val)) {
f = 1 ;
S = S.substring( 0 , i) + X
+ S.substring(i);
break ;
}
}
if (f == 0 ) {
S = S + X;
}
}
// If S is positive
else {
int f = 0 ;
// If X > S[i] insert X
for ( int i = 0 ; i < S.length(); i++) {
char val = S.charAt(i);
if (X > Character.getNumericValue(val)) {
f = 1 ;
S = S.substring( 0 , i) + X
+ S.substring(i);
break ;
}
}
if (f == 0 ) {
S = S + X;
}
}
// Return the answer
return S;
}
// Driver Code
public static void main(String[] args)
{
// Given Input
String S = "-13" ;
int X = 2 ;
// Function Call
System.out.println(largestValue(S, X));
}
} |
# Python program for the above approach # Function to find Largest Number after # insertion of a digit def largestValue(S, X):
# If S is negative
if S[ 0 ] = = '-' :
f = 0
# Iterate through characters of S
for i, val in enumerate (S):
if i = = 0 :
continue
# If digit x is less
# than S[i] insert digit
# after X
if X < int (val):
f = 1
S = S[:i] + str (X) + S[i:]
break
if f = = 0 :
S = S + str (X)
# If S is positive
else :
f = 0
# If x > S[i] insert x
for i, val in enumerate (S):
if X > int (val):
f = 1
S = S[:i] + str (X) + S[i:]
break
if f = = 0 :
S = S + str (X)
# Return the answer
return S
# Driver Code # Given Input S = "-13"
X = 2
# Function Call print (largestValue(S, X))
|
// JavaScript program for the above approach // Function to find Largest Number after // insertion of a digit function largestValue(S, X) {
// If S is negative
if (S[0] === '-' ) {
let f = 0;
// Iterate through characters of S
for (let i = 0; i < S.length; i++) {
let val = S[i];
if (i === 0) {
continue ;
}
// If digit x is less
// than S[i] insert digit
// after X
if (X < parseInt(val)) {
f = 1;
S = S.slice(0, i) + X.toString() + S.slice(i);
break ;
}
}
if (f === 0) {
S = S + X.toString();
}
}
// If S is positive
else {
let f = 0;
// If x > S[i] insert x
for (let i = 0; i < S.length; i++) {
let val = S[i];
if (X > parseInt(val)) {
f = 1;
S = S.slice(0, i) + X.toString() + S.slice(i);
break ;
}
}
if (f === 0) {
S = S + X.toString();
}
}
// Return the answer
return S;
} // Driver Code // Given Input let S = "-13" ;
let X = 2; // Function Call console.log(largestValue(S, X)); // This code is contributed by phasing17. |
// C# code for the above approach using System;
class GFG
{ // Function to find Largest Number after
// insertion of a digit
static string LargestValue( string S, int X)
{
// If S is negative
if (S[0] == '-' ) {
int f = 0;
// Iterate through characters of S
for ( int i = 0; i < S.Length; i++) {
char val = S[i];
if (i == 0) {
continue ;
}
// If digit x is less
// than S[i] insert digit
// after X
if (X < val - '0' ) {
f = 1;
S = S.Substring(0, i) + X.ToString()
+ S.Substring(i);
break ;
}
}
if (f == 0) {
S = S + X.ToString();
}
}
// If S is positive
else {
int f = 0;
// If x > S[i] insert x
for ( int i = 0; i < S.Length; i++) {
char val = S[i];
if (X > val - '0' ) {
f = 1;
S = S.Substring(0, i) + X.ToString()
+ S.Substring(i);
break ;
}
}
if (f == 0) {
S = S + X.ToString();
}
}
// Return the answer
return S;
}
// Driver code
static void Main( string [] args)
{
// Given Input
string S = "-13" ;
int X = 2;
// Function Call
Console.WriteLine(LargestValue(S, X));
}
} // This code is contributed by phasing17. |
-123
Time Complexity: O(N)
Auxiliary Space: O(1)