Largest even digit number not greater than N

Given a number N, we need to write a program to find the largest number not greater than N which has all digits even.

Examples:

Input: N = 23
Output: 22 
Explanation: 22 is the largest number not 
greater then N which has all digits even. 

Input: N = 236
Output: 228 
Explanation: 228 is the largest number not 
greater than N which has all digits even. 

Naive Approach: A naive approach is to iterate from N to 0, and find the first number which has all of its digits even.

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to print the largest
// integer not greater than N with all even digits
#include <bits/stdc++.h>
using namespace std;
  
// function to check if all digits
// are even of a given number
int checkDigits(int n)
{
    // iterate for all digits
    while (n) {
        if ((n % 10) % 2) // if digit is odd
            return 0;
  
        n /= 10;
    }
  
    // all digits are even
    return 1;
}
  
// function to return the largest number
// with all digits even
int largestNumber(int n)
{
    // iterate till we find a
    // number with all digits even
    for (int i = n;; i--)
        if (checkDigits(i))
            return i;
}
  
// Driver Code
int main()
{
    int N = 23;    
    cout << largestNumber(N);
    return 0;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print the largest
// integer not greater than N with 
// all even digits
import java .io.*;
  
public class GFG {
      
// function to check if all digits
// are even of a given number
static int checkDigits(int n)
{
      
    // iterate for all digits
    while (n > 0)
    {
          
        // if digit is odd
        if (((n % 10) % 2) > 0
            return 0;
  
        n /= 10;
    }
  
    // all digits are even
    return 1;
}
  
// function to return the largest 
// number with all digits even
static int largestNumber(int n)
{
      
    // iterate till we find a
    // number with all digits even
    for (int i = n;; i--)
        if (checkDigits(i) > 0)
            return i;
}
  
    // Driver Code
    static public void main (String[] args)
    {
        int N = 23
        System.out.println(largestNumber(N));
    }
}
  
// This code is contributed by vt_m.
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to print the largest
# integer not greater than N with 
# all even digits
  
# function to check if all digits
# are even of a given number
def checkDigits(n):
  
      
    # iterate for all digits
    while (n>0): 
        # if digit is odd
        if ((n % 10) % 2): 
            return False;
  
        n =int(n/10);
  
    # all digits are even
    return True;
  
# function to return the
# largest number with
# all digits even
def largestNumber(n):
      
    # Iterate till we find a
    # number with all digits even
    for i in range(n,-1,-1):
        if (checkDigits(i)):
            return i;
  
# Driver Code
N = 23
print(largestNumber(N));
  
# This code is contributed by mits
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print the largest
// integer not greater than N with 
// all even digits
using System;
  
public class GFG {
      
// function to check if all digits
// are even of a given number
static int checkDigits(int n)
{
      
    // iterate for all digits
    while (n > 0)
    {
          
        // if digit is odd
        if (((n % 10) % 2) > 0) 
            return 0;
  
        n /= 10;
    }
  
    // all digits are even
    return 1;
}
  
// function to return the largest 
// number with all digits even
static int largestNumber(int n)
{
      
    // iterate till we find a
    // number with all digits even
    for (int i = n;; i--)
        if (checkDigits(i) > 0)
            return i;
}
  
    // Driver Code
    static public void Main ()
    {
        int N = 23; 
        Console.WriteLine(largestNumber(N));
    }
}
  
// This code is contributed by aunj_67.
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to print the largest
// integer not greater than N with 
// all even digits
  
// function to check if all digits
// are even of a given number
function checkDigits($n)
{
      
    // iterate for all digits
    while ($n
    {
        // if digit is odd
        if (($n % 10) % 2) 
            return 0;
  
        $n /= 10;
    }
  
    // all digits are even
    return 1;
}
  
// function to return the
// largest number with
// all digits even
function largestNumber($n)
{
      
    // Iterate till we find a
    // number with all digits even
    for ($i = $n; ; $i--)
        if (checkDigits($i))
            return $i;
}
  
// Driver Code
$N = 23; 
echo(largestNumber($N));
  
// This code is contributed by Ajit.
?>
chevron_right


Output:

22

Time Complexity: O(N)

Efficient Approach: We can obtain the required number by decreasing the first odd digit in N by one and then replacing all digits to the right of that odd digit with the largest even digit (i.e. 8). For example, if N = 24578, then X = 24488. In some cases, this approach can create a leading 0, we can simply drop the leading 0 in that case. For example, if N = 1334 then X = 0888. So, our answer will be X = 888. If there are no odd digits in N, then N is the number itself.

Below is the implementation of the above approach:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to print the largest
// integer not greater than N with all even digits
#include <bits/stdc++.h>
using namespace std;
  
// function to return the largest number
// with all digits even
int largestNumber(int n)
{
    string s = "";
    int duplicate = n;
  
    // convert the number to a string for 
    // easy operations
    while (n) {
        s = char(n % 10 + 48) + s;
        n /= 10;
    }
  
    int index = -1;
  
    // find first odd digit
    for (int i = 0; i < s.length(); i++) {
        if ((s[i] - '0') % 2 & 1) {
            index = i;
            break;
        }
    }
  
    // if no digit, then N is the answer
    if (index == -1)
        return duplicate;
  
    int num = 0;
  
    // till first odd digit, add all even numbers
    for (int i = 0; i < index; i++)
        num = num * 10 + (s[i] - '0');
  
    // decrease 1 from the odd digit
    num = num * 10 + (s[index] - '0' - 1);
  
    // add 0 in the rest of the digits
    for (int i = index + 1; i < s.length(); i++)
        num = num * 10 + 8;
  
    return num;
}
  
// Driver Code
int main()
{
    int N = 24578;
  
    cout << largestNumber(N);
  
    return 0;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to print the largest
// integer not greater than N with all even digits
class GFG
{
      
// function to return the largest number
// with all digits even
static int largestNumber(int n)
{
    String s = "";
    int duplicate = n;
  
    // convert the number to a string for 
    // easy operations
    while (n > 0
    {
        s = (char)(n % 10 + 48) + s;
        n /= 10;
    }
  
    int index = -1;
  
    // find first odd digit
    for (int i = 0; i < s.length(); i++)
    {
        if ((((int)(s.charAt(i) - '0') % 2) & 1) > 0)
        {
            index = i;
            break;
        }
    }
  
    // if no digit, then N is the answer
    if (index == -1)
        return duplicate;
  
    int num = 0;
  
    // till first odd digit, add all even numbers
    for (int i = 0; i < index; i++)
        num = num * 10 + (int)(s.charAt(i) - '0');
  
    // decrease 1 from the odd digit
    num = num * 10 + ((int)s.charAt(index) - (int)('0') - 1);
  
    // add 0 in the rest of the digits
    for (int i = index + 1; i < s.length(); i++)
        num = num * 10 + 8;
  
    return num;
}
  
// Driver Code
public static void main (String[] args)
{
    int N = 24578;
  
    System.out.println(largestNumber(N));
}
}
  
// This code is contributed by mits
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to print the largest
# integer not greater than N with 
# all even digits
import math as mt
  
# function to return the largest 
# number with all digits even
def largestNumber(n):
  
    s = ""
    duplicate = n
  
    # convert the number to a string 
    # for easy operations
    while (n > 0):
        s = chr(n % 10 + 48) + s
        n = n // 10
      
    index = -1
  
    # find first odd digit
    for i in range(len(s)): 
        if ((ord(s[i]) - ord('0')) % 2 & 1):
            index = i
            break
          
    # if no digit, then N is the answer
    if (index == -1):
        return duplicate
  
    num = 0
  
    # till first odd digit, add all 
    # even numbers
    for i in range(index):
        num = num * 10 + (ord(s[i]) - ord('0'))
  
    # decrease 1 from the odd digit
    num = num * 10 + (ord(s[index]) -   
                      ord('0') - 1)
  
    # add 0 in the rest of the digits
    for i in range(index+1,len(s)):
        num = num * 10 + 8
  
    return num
  
# Driver Code
N = 24578
  
print(largestNumber(N))
  
# This code is contributed 
# by Mohit kumar 29
     
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to print the largest
// integer not greater than N with all even digits
using System;
  
class GFG
{
      
// function to return the largest number
// with all digits even
static int largestNumber(int n)
{
    string s = "";
    int duplicate = n;
  
    // convert the number to a string for 
    // easy operations
    while (n > 0) 
    {
        s = (char)(n % 10 + 48) + s;
        n /= 10;
    }
  
    int index = -1;
  
    // find first odd digit
    for (int i = 0; i < s.Length; i++)
    {
        if ((((int)(s[i] - '0') % 2) & 1) > 0)
        {
            index = i;
            break;
        }
    }
  
    // if no digit, then N is the answer
    if (index == -1)
        return duplicate;
  
    int num = 0;
  
    // till first odd digit, add all even numbers
    for (int i = 0; i < index; i++)
        num = num * 10 + (int)(s[i] - '0');
  
    // decrease 1 from the odd digit
    num = num * 10 + ((int)s[index] - (int)('0') - 1);
  
    // add 0 in the rest of the digits
    for (int i = index + 1; i < s.Length; i++)
        num = num * 10 + 8;
  
    return num;
}
  
// Driver Code
static void Main()
{
    int N = 24578;
  
    Console.WriteLine(largestNumber(N));
}
}
  
// This code is contributed by mits
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to print the largest
// integer not greater than N with all even digits
  
// function to return the largest number
// with all digits even
function largestNumber($n)
{
    $s = "";
    $duplicate = $n;
  
    // convert the number to a string for 
    // easy operations
    while ($n)
    {
        $s = chr($n % 10 + 48).$s;
        $n =(int)($n/10);
    }
  
    $index = -1;
  
    // find first odd digit
    for ($i = 0; $i < strlen($s); $i++)
    {
        if (ord($s[$i] - '0') % 2 & 1)
        {
            $index = $i;
            break;
        }
    }
  
    // if no digit, then N is the answer
    if ($index == -1)
        return $duplicate;
  
    $num = 0;
  
    // till first odd digit, add all even numbers
    for ($i = 0; $i < $index; $i++)
        $num = $num * 10 + (ord($s[$i]) - ord('0'));
  
    // decrease 1 from the odd digit
    $num = $num * 10 + ((ord($s[$i]) - ord('0')) - 1);
  
    // add 0 in the rest of the digits
    for ($i = $index + 1; $i < strlen($s); $i++)
        $num = $num * 10 + 8;
  
    return $num;
}
  
// Driver Code
    $N = 24578;
  
    echo largestNumber($N);
  
// This code is contributed by mits
?>
chevron_right


Output:
24488

Time Complexity: O(M), where M is the number of digits

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




Article Tags :
Practice Tags :