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:

C++

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


Java

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


Python3

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


C#

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


PHP

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:

C++

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


Java

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


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to prthe 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


C#

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


PHP

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



My Personal Notes arrow_drop_up

Striver(underscore)79 at Codechef and codeforces D

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.