Skip to content
Related Articles

Related Articles

Improve Article
Smallest odd digits number not less than N
  • Last Updated : 30 Apr, 2021

Given a number N, the task is to find the smallest number not less than N, which has all digits odd. 
Examples: 
 

Input: N = 1345  
Output: 1351
1351 is the smallest number not 
less than N, whose all digits are odd. 

Input: N = 2397 
Output: 3111 
3111 is the smallest number not 
less than N, whose all digits are odd.

 

Naive approach: A naive approach is to keep iterating from N until we find a number with all digits odd. 
Below is the implementation of the above approach: 
 

C++




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

Java




// Java program to print the smallest
// integer not less than N with all odd digits
class Geeks {
 
// function to check if all digits
// are odd of a given number
static int check_digits(int n)
{
    // iterate for all digits
    while (n > 0) {
        if ((n % 10) % 2 == 0) // if digit is even
            return 0;
 
        n /= 10;
    }
 
    // all digits are odd
    return 1;
}
 
// function to return the smallest number
// with all digits odd
static int smallest_number(int n)
{
    // iterate till we find a
    // number with all digits odd
    for (int i = n;; i++)
        if (check_digits(i) > 0)
            return i;
}
 
// Driver Code
public static void main(String args[])
{
    int N = 2397;
    System.out.println(smallest_number(N));
}
}
 
// This code is contributed by Kirti_Mangal

Python3




# Python 3 program to print the smallest
# integer not less than N with all odd digits
 
# function to check if all digits
# are odd of a given number
def check_digits(n):
     
    # iterate for all digits
    while (n):
         
        # if digit is even
        if ((n % 10) % 2 == 0):
            return 0
 
        n = int(n / 10)
 
    # all digits are odd
    return 1
 
# function to return the smallest
# number with all digits odd
def smallest_number(n):
     
    # iterate till we find a
    # number with all digits odd
    i = n
    while(1):
        if (check_digits(i)):
            return i
 
        i += 1
 
# Driver Code
if __name__ == '__main__':
    N = 2397
    print(smallest_number(N))
 
# This code is contributed by
# Sanjit_Prasad

C#




// C# program to print the smallest
// integer not less than N with all
// odd digits
using System;
 
class GFG
{
// function to check if all digits
// are odd of a given number
static int check_digits(int n)
{
    // iterate for all digits
    while (n != 0)
    {
        if ((n % 10) % 2 == 0) // if digit is even
            return 0;
 
        n /= 10;
    }
 
    // all digits are odd
    return 1;
}
 
// function to return the smallest
// number with all digits odd
static int smallest_number(int n)
{
    // iterate till we find a
    // number with all digits odd
    for (int i = n;; i++)
        if (check_digits(i) == 1)
            return i;
}
 
// Driver Code
static void Main()
{
    int N = 2397;
    Console.WriteLine(smallest_number(N));
}
}
 
// This code is contributed by ANKITRAI1

PHP




<?php
// PHP program to print the smallest
// integer not less than N with all
// odd digits
 
// function to check if all digits
// are odd of a given number
function check_digits($n)
{
    // iterate for all digits
    while ($n > 1)
    {
        // if digit is even
        if (($n % 10) % 2 == 0)
            return 0;
 
        $n = (int)$n / 10;
    }
 
    // all digits are odd
    return 1;
}
 
// function to return the smallest
// number with all digits odd
function smallest_number( $n)
{
    // iterate till we find a
    // number with all digits odd
    for ($i = $n;; $i++)
        if (check_digits($i))
            return $i;
}
 
// Driver Code
$N = 2397;
echo smallest_number($N);
 
// This code is contributed by ajit
?>

Javascript




<script>
// java script program to print the smallest
// integer not less than N with all
// odd digits
 
// function to check if all digits
// are odd of a given number
function check_digits(n)
{
 
    // iterate for all digits
    while (n > 1)
    {
     
        // if digit is even
        if ((n % 10) % 2 == 0)
            return 0;
 
         n = parseInt(n / 10);
    }
 
    // all digits are odd
    return 1;
}
 
// function to return the smallest
// number with all digits odd
function smallest_number( n)
{
 
    // iterate till we find a
    // number with all digits odd
    for (i = n;; i++)
        if (check_digits(i))
            return i;
}
 
// Driver Code
let N = 2397;
document.write( smallest_number(N));
 
// This code is contributed by sravan kumar (vignan)
</script>
Output: 
3111

 

Time Complexity: O(N)
Efficient Approach: We can find the number by increasing the first even digit in N by one and replacing all digits to the right of that odd digit with the smallest odd digit (i.e. 1). If there are no even digits in N, then N is the smallest number itself. For example, consider N = 213. Increment first even digit in N i.e., 2 to 3 and replace all digits right to it by 1. So, our required number will be 311.
Below is the implementation of the efficient approach: 
 



C++




// CPP program to print the smallest
// integer not less than N with all odd digits
#include <bits/stdc++.h>
using namespace std;
 
// function to return the smallest number
// with all digits odd
int smallestNumber(int n)
{
    int num = 0;
    string s = "";
 
    int duplicate = n;
    // convert the number to string to
    // perform operations
    while (n) {
        s = char(n % 10 + 48) + s;
        n /= 10;
    }
 
    int index = -1;
 
    // find out the first even number
    for (int i = 0; i < s.length(); i++) {
        int digit = s[i] - '0';
        if ((digit & 1) == 0) {
            index = i;
            break;
        }
    }
 
    // if no even numbers are there, than n is the answer
    if (index == -1)
        return duplicate;
 
    // add all digits till first even
    for (int i = 0; i < index; i++)
        num = num * 10 + (s[i] - '0');
 
    // increase the even digit by 1
    num = num * 10 + (s[index] - '0' + 1);
 
    // add 1 to the right of the even number
    for (int i = index + 1; i < s.length(); i++)
        num = num * 10 + 1;
 
    return num;
}
 
// Driver Code
int main()
{
    int N = 2397;
    cout << smallestNumber(N);
 
    return 0;
}

Java




//Java program to print the smallest
// integer not less than N with all odd digits
 
public class GFG {
 
// function to return the smallest number
// with all digits odd
    static int smallestNumber(int n) {
        int num = 0;
        String s = "";
 
        int duplicate = n;
        // convert the number to string to
        // perform operations
        while (n > 0) {
            s = (char) (n % 10 + 48) + s;
            n /= 10;
        }
 
        int index = -1;
 
        // find out the first even number
        for (int i = 0; i < s.length(); i++) {
            int digit = s.charAt(i) - '0';
            if ((digit & 1) == 0) {
                index = i;
                break;
            }
        }
 
        // if no even numbers are there, than n is the answer
        if (index == -1) {
            return duplicate;
        }
 
        // add all digits till first even
        for (int i = 0; i < index; i++) {
            num = num * 10 + (s.charAt(i) - '0');
        }
 
        // increase the even digit by 1
        num = num * 10 + (s.charAt(index) - '0' + 1);
 
        // add 1 to the right of the even number
        for (int i = index + 1; i < s.length(); i++) {
            num = num * 10 + 1;
        }
 
        return num;
    }
 
// Driver Code
    static public void main(String[] args) {
        int N = 2397;
        System.out.println(smallestNumber(N));
    }
}
 
/*This code is contributed by PrinciRaj1992*/

Python 3




# Python 3 program to print the smallest
# integer not less than N with all odd digits
 
# function to return the smallest
# number with all digits odd
def smallestNumber(n):
 
    num = 0
    s = ""
 
    duplicate = n
     
    # convert the number to string to
    # perform operations
    while (n):
        s = chr(n % 10 + 48) + s
        n //= 10
 
    index = -1
 
    # find out the first even number
    for i in range(len( s)):
        digit = ord(s[i]) - ord('0')
        if ((digit & 1) == 0) :
            index = i
            break
 
    # if no even numbers are there,
    # than n is the answer
    if (index == -1):
        return duplicate
 
    # add all digits till first even
    for i in range( index):
        num = num * 10 + (ord(s[i]) -
                          ord('0'))
 
    # increase the even digit by 1
    num = num * 10 + (ord(s[index]) -
                      ord('0') + 1)
 
    # add 1 to the right of the
    # even number
    for i in range(index + 1 , len(s)):
        num = num * 10 + 1
 
    return num
 
# Driver Code
if __name__ == "__main__":
     
    N = 2397
    print(smallestNumber(N))
 
# This code is contributed by ita_c

C#




// C# program to print the smallest
// integer not less than N with all odd digits
 
using System;
public class GFG{
 
 
// function to return the smallest number
// with all digits odd
    static int smallestNumber(int n) {
        int num = 0;
        String s = "";
 
        int duplicate = n;
        // convert the number to string to
        // perform operations
        while (n > 0) {
            s = (char) (n % 10 + 48) + s;
            n /= 10;
        }
 
        int index = -1;
 
        // find out the first even number
        for (int i = 0; i < s.Length; i++) {
            int digit = s[i] - '0';
            if ((digit & 1) == 0) {
                index = i;
                break;
            }
        }
 
        // if no even numbers are there, than n is the answer
        if (index == -1) {
            return duplicate;
        }
 
        // add all digits till first even
        for (int i = 0; i < index; i++) {
            num = num * 10 + (s[i] - '0');
        }
 
        // increase the even digit by 1
        num = num * 10 + (s[index] - '0' + 1);
 
        // add 1 to the right of the even number
        for (int i = index + 1; i < s.Length; i++) {
            num = num * 10 + 1;
        }
 
        return num;
    }
 
// Driver Code
    static public void Main() {
        int N = 2397;
        Console.WriteLine(smallestNumber(N));
    }
}
 
// This code is contributed by PrinciRaj1992

Javascript




<script>
 
// Javascript program to print the smallest
// integer not less than N with all odd digits
 
// function to return the smallest number
// with all digits odd
function smallestNumber(n)
{
    var num = 0;
    var s = "";
 
    var duplicate = n;
    // convert the number to string to
    // perform operations
    while (n) {
        s = String.fromCharCode(n % 10 + 48) + s;
        n = parseInt(n/10);
    }
 
    var index = -1;
 
    // find out the first even number
    for (var i = 0; i < s.length; i++) {
        var digit = s[i].charCodeAt(0) - '0'.charCodeAt(0);
        if ((digit & 1) == 0) {
            index = i;
            break;
        }
    }
 
    // if no even numbers are there, than n is the answer
    if (index == -1)
        return duplicate;
 
    // add all digits till first even
    for (var i = 0; i < index; i++)
        num = num * 10 + (s[i].charCodeAt(0) - '0'.charCodeAt(0));
 
    // increase the even digit by 1
    num = num * 10 + (s[index].charCodeAt(0) - '0'.charCodeAt(0) + 1);
 
    // add 1 to the right of the even number
    for (var i = index + 1; i < s.length; i++)
        num = num * 10 + 1;
 
    return num;
}
 
// Driver Code
var N = 2397;
document.write( smallestNumber(N));
  
</script>
Output: 
3111

 

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

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.




My Personal Notes arrow_drop_up
Recommended Articles
Page :