Given a large integer N, the task is to find the largest possible integer which is divisible by 9 after inserting exactly one digit from 0 to 9 anywhere in the N.
Note: Leading zeroes are not allowed.
Examples:
Input: N = “12”
Output: 612
Explanation: The numbers which are divisible by 9 after inserting digit are 612, 162, 126.
And the largest integer is 612. So the output is 612Input: N = “1346182944512412414214”
Output: 81346182944512412414214
Approach: The problem can be solved with the help of the below observation:
The idea is to insert the digit 0 to 9 at every position in the N and check is it divisible by 9 (divisible only if sum of digits is divisible by 9).
If it is found to be true then store the maximum value with position where digit is inserted and finally print the maximum value.
Follow the below steps to solve the problem:
- Initialize a pair variable, ( say maxi = {“”, 0}) to store the largest integer which is divisible by 9 with the position where the digit is inserted.
- Iterate over the range [0, len) and calculate the digit sum of the number (say stored in variable sum).
- Iterate over the range [0, len) and perform the following steps:
- Iterate for ch = ‘0’ to ‘9’ and perform the following steps:
- Check for leading 0s, if it is found to be true then continue with the iteration.
- Check if (ch – ‘0’) + sum is divisible by 9 (i.e. sum after inserting that digit in N). If it is found to be true then set or update the value of maxi to the new value.
- Iterate for ch = ‘0’ to ‘9’ and perform the following steps:
- Finally, print the value of the maximum number (stored in maxi.first).
Below is the implementation of the above approach:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to check number is divisible by 9 bool isDivBy9( char c, int sum)
{ return (((c - '0' ) + sum) % 9 == 0);
} // Function to find the largest number pair<string, int > maxNumber(pair<string,
int >
s1,
string s2, int i)
{ if ((s1.first[s1.second] - '0' ) > (s2[s1.second] - '0' ))
return s1;
return { s2, i };
} // Function to find the largest integer // which is divisible by 9 after // inserting any digit in the N string findLargestNumber(string N, int len)
{ // Stores the largest integer which is
// divisible by 9
pair<string, int > maxi = { "" , 0 };
// Stores the sum of digits of N
int sum = 0;
for ( int i = 0; i < len; i++) {
// Update the value of sum
sum += (N[i] - '0' );
}
for ( int i = 0; i <= len; i++) {
for ( char ch = '0' ; ch <= '9' ; ch++) {
// Skip leading zeroes
if (i == 0 && ch == '0' )
continue ;
// Check number is divisible by 9
if (isDivBy9(ch, sum)) {
// Check maxi is not set
if (maxi.first.length() == 0) {
// Set value of maxi
maxi = {
N.substr(0, i) + ch + N.substr(i), i
};
}
else {
// Update value of maxi
maxi = maxNumber(maxi,
N.substr(0, i) + ch + N.substr(i), i);
}
}
}
}
// Print the value of maxi.first
return maxi.first;
} // Driver Code int main()
{ string N = "12" ;
int len = N.length();
// Function call
cout << findLargestNumber(N, len);
return 0;
} |
// Java program for the above approach import java.util.*;
class GFG {
// Function to check number is divisible by 9
static boolean isDivBy9( char c, int sum)
{
return (((c - '0' ) + sum) % 9 == 0 );
}
// Function to find the largest number
static String[] maxNumber(String[] s1, String s2, int i)
{
if ((s1[ 0 ].charAt(Integer.parseInt(s1[ 1 ])) - '0' )
> (s2.charAt(Integer.parseInt(s1[ 1 ])) - '0' ))
return s1;
String[] map = { s2, Integer.toString(i) };
return map;
}
// Function to find the largest integer
// which is divisible by 9 after
// inserting any digit in the N
static String findLargestNumber(String N, int len)
{
// Stores the largest integer which is
// divisible by 9
String[] maxi = { "" , "0" };
// Stores the sum of digits of N
int sum = 0 ;
for ( int i = 0 ; i < len; i++) {
// Update the value of sum
sum += (N.charAt(i) - '0' );
}
for ( int i = 0 ; i <= len; i++) {
for ( char ch = '0' ; ch <= '9' ; ch++) {
// Skip leading zeroes
if ((i == 0 ) && (ch == '0' ))
continue ;
// Check number is divisible by 9
if (isDivBy9(ch, sum)) {
// Check maxi is not set
if ((maxi[ 0 ]) == "" ) {
// Set value of maxi
maxi[ 0 ] = N.substring( 0 , i) + ch
+ N.substring(i);
maxi[ 1 ] = Integer.toString(i);
}
else {
// Update value of maxi
maxi = maxNumber(
maxi,
N.substring( 0 , i) + ch
+ N.substring(i),
i);
}
}
}
}
// Print the value of maxi.first
return maxi[ 0 ];
}
// driver code
public static void main(String[] args)
{
String N = "12" ;
int len = N.length();
// Function call
System.out.print(findLargestNumber(N, len));
}
} // This code is contributed by phasing17 |
# Python3 program for the above approach # Function to check number is divisible by 9 def isDivBy9(c, sums):
return ((c + sums) % 9 ) = = 0
# Function to find the largest number def maxNumber(s1, s2, i):
if s1[ 0 ][s1[ 1 ]] > s2[s1[ 1 ]]:
return s1
return [s2, i]
# Function to find the largest integer # which is divisible by 9 after # inserting any digit in the N def findLargestNumber(N, length):
# NOTE: we are using length as the variable name
# instead of len because len is a predefined method in Python3
# that we will be using in this program
# this is a good practice in code
# Stores the largest integer which is
# divisible by 9
maxi = ["", 0 ]
# Stores the sum of digits of N
sums = 0
for i in range (length):
# Update the value of sum
sums + = ord (N[i]) - ord ( "0" )
for i in range (length + 1 ):
for ch in range ( 10 ):
# Skip leading zeroes
if i = = 0 and ch = = 0 :
continue
# Check number is divisible by 9
if isDivBy9(ch, sums):
# Check maxi is not set
if len (maxi[ 0 ]) = = 0 :
# Set value of maxi
maxi = [N[ 0 :i] + str (ch) + N[i::], i]
else :
# Update value of maxi
maxi = maxNumber(maxi, N[ 0 :i] + str (ch) + N[i:], i)
# Print the value of the first
# element of maxi
return maxi[ 0 ]
# Driver Code N = "12"
length = len (N)
# Function call print (findLargestNumber(N, length))
# This code is contributed by phasing17 |
// C# program to implement above approach using System;
using System.Collections;
using System.Collections.Generic;
class GFG
{ // Function to check number is divisible by 9
static bool isDivBy9( char c, int sum)
{
return (((( int )c - ( int )( '0' )) + sum) % 9 == 0);
}
// Function to find the largest number
static pair maxNumber(pair s1, String s2, int i)
{
if (s1.second == null ){
return s1;
}
int x = int .Parse(s1.second);
if (s1.first == null ){
return s1;
}
if ((( int )(s1.first[x]) - ( int )( '0' )) > (( int )s2[x] - ( int )( '0' ))){
return s1;
}
pair map = new pair(s2, i.ToString());
return map;
}
// Function to find the largest integer
// which is divisible by 9 after
// inserting any digit in the N
static String findLargestNumber(String N, int len)
{
// Stores the largest integer which is
// divisible by 9
pair maxi = new pair( "" , "0" );
// Stores the sum of digits of N
int sum = 0;
for ( int i = 0 ; i < len ; i++) {
// Update the value of sum
sum += (( int )N[i] - ( int )( '0' ));
}
for ( int i = 0 ; i <= len ; i++) {
for ( char ch = '0' ; ch <= '9' ; ch++) {
// Skip leading zeroes
if ((i == 0) && (ch == '0' ))
continue ;
// Check number is divisible by 9
if (isDivBy9(ch, sum)) {
// Check maxi is not set
if ((maxi.first) == "" ) {
// Set value of maxi
maxi.first = N.Substring(0, i) + ch + N.Substring(i);
maxi.second = i.ToString();
}
else {
// Update value of maxi
maxi = maxNumber(maxi, N.Substring(0, i) + ch + N.Substring(i), i);
}
}
}
}
// Print the value of maxi.first
return maxi.first;
}
public static void Main( string [] args){
String N = "12" ;
int len = N.Length;
// Function call
Console.Write(findLargestNumber(N, len));
}
} public class pair{
public String first;
public String second;
public pair(String first, String second){
this .first = first;
this .second = second;
}
} // This code is contributed by entertain2022. |
<script> // JavaScript program for the above approach
// Function to check number is divisible by 9
const isDivBy9 = (c, sum) => {
return ((c + sum) % 9 == 0);
}
// Function to find the largest number
const maxNumber = (s1, s2, i) => {
if (s1[0][s1[1]] > s2[s1[1]])
return s1;
return [s2, i];
}
// Function to find the largest integer
// which is divisible by 9 after
// inserting any digit in the N
const findLargestNumber = (N, len) => {
// Stores the largest integer which is
// divisible by 9
let maxi = [ "" , 0];
// Stores the sum of digits of N
let sum = 0;
for (let i = 0; i < len; i++) {
// Update the value of sum
sum += (N.charCodeAt(i) - '0' .charCodeAt(0));
}
for (let i = 0; i <= len; i++) {
for (let ch = 0; ch <= 9; ch++) {
// Skip leading zeroes
if (i == 0 && ch == 0)
continue ;
// Check number is divisible by 9
if (isDivBy9(ch, sum)) {
// Check maxi is not set
if (maxi[0].length == 0) {
// Set value of maxi
maxi = [N.substring(0, i) + ch.toString() + N.substring(i), i];
}
else {
// Update value of maxi
maxi = maxNumber(maxi,
N.substr(0, i) + ch.toString() + N.substr(i), i);
}
}
}
}
// Print the value of maxi.first
return maxi[0];
}
// Driver Code
let N = "12" ;
let len = N.length;
// Function call
document.write(findLargestNumber(N, len));
// This code is contributed by rakeshsahni </script> |
612
Time Complexity: O(N)
Auxiliary Space: O(1)