Open In App
Related Articles

Smallest odd digits number not less than N

Improve Article
Improve
Save Article
Save
Like Article
Like

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
import java.io.*;
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

Complexity Analysis:

  • Time Complexity: O(N)
  • Auxiliary Space: O(1)

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.push_back(((n % 10) + '0'));
        n /= 10;
    }
    reverse(s.begin(), s.end());
 
    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
import java.io.*;
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.
Auxiliary Space: O(M)

Another Approach:

Initialize a variable num to n.

If num is even, increment it by 1.

While num contains even digits:

a. Convert num to a string and check each digit.

b. If the current digit is even, add a power of 10 to num such that the resulting number has the same number of digits as num.

Return num.

C++




#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int n = 123456;
 
    int num = n;
 
    // If num is even, increment it by 1
    if (num % 2 == 0) {
        num++;
    }
 
    // While num contains even digits,
    // add a power of 10 to num such that the resulting
    // number
    // has the same number of digits as num
    while (1) {
        int contains_even = 0;
        string str = to_string(num);
        int len = str.length();
        for (int i = 0; i < len; i++) {
            if ((str[i] - '0') % 2 == 0) {
                contains_even = 1;
                int pow10 = 1;
                for (int j = 0; j < len - i - 1; j++) {
                    pow10 *= 10;
                }
                num += pow10;
                break;
            }
        }
        if (!contains_even) {
            break;
        }
    }
 
    cout << "Smallest odd digits number not less than " << n
         << " is: " << num << endl;
 
    return 0;
}
// this code is contributed by thebeginner01(Akash Bankar)


C




#include <stdio.h>
#include <string.h>
 
int main()
{
    int n = 123456;
 
    int num = n;
 
    // If num is even, increment it by 1
    if (num % 2 == 0) {
        num++;
    }
 
    // While num contains even digits, add a power of 10 to
    // num such that the resulting number has the same
    // number of digits as num
    while (1) {
        int contains_even = 0;
        char str[20];
        sprintf(str, "%d", num);
        int len = strlen(str);
        for (int i = 0; i < len; i++) {
            if ((str[i] - '0') % 2 == 0) {
                contains_even = 1;
                int pow10 = 1;
                for (int j = 0; j < len - i - 1; j++) {
                    pow10 *= 10;
                }
                num += pow10;
                break;
            }
        }
        if (!contains_even) {
            break;
        }
    }
 
    printf("Smallest odd digits number not less than %d "
           "is: %d\n",
           n, num);
 
    return 0;
}


Python3




# Function to get the smallest odd digits number not less than n
def GetSmallestOddDigitsNumber(n):
    num = n
 
    # If num is even, increment it by 1
    if num % 2 == 0:
        num += 1
 
    # While num contains even digits,
    # add a power of 10 to num such that the resulting number
    # has the same number of digits as num
    while True:
        contains_even = False
        str_num = str(num)
        len_num = len(str_num)
        for i in range(len_num):
            if int(str_num[i]) % 2 == 0:
                contains_even = True
                pow10 = 1
                for j in range(len_num - i - 1):
                    pow10 *= 10
                num += pow10
                break
        if not contains_even:
            break
 
    print("Smallest odd digits number not less than", n, "is:", num)
 
 
# Example usage
GetSmallestOddDigitsNumber(123456)


Javascript




let n = 123456;
 
let num = n;
 
// If num is even, increment it by 1
if (num % 2 == 0) {
    num++;
}
 
// While num contains even digits, add a power of 10 to num
// such that the resulting number has the same number of digits as num
while (1) {
    let contains_even = 0;
    let str = num.toString();
    let len = str.length;
    for (let i = 0; i < len; i++) {
        if ((str[i] - '0') % 2 == 0) {
            contains_even = 1;
            let pow10 = 1;
            for (let j = 0; j < len - i - 1; j++) {
                pow10 *= 10;
            }
            num += pow10;
            break;
        }
    }
    if (!contains_even) {
        break;
    }
}
 
console.log("Smallest odd digits number not less than " + n + " is: " + num);


Java




import java.io.*;
import java.lang.*;
import java.util.*;
 
class Main {
    public static void main(String[] args)
        throws java.lang.Exception
    {
        int n = 123456;
        int num = n;
        // If num is even, increment it by 1
        if (num % 2 == 0) {
            num++;
        }
        // While num contains even digits,
        // add a power of 10 to num such that the resulting
        // number
        // has the same number of digits as num
        while (true) {
            int contains_even = 0;
            String str = Integer.toString(num);
            int len = str.length();
            for (int i = 0; i < len; i++) {
                if ((str.charAt(i) - '0') % 2 == 0) {
                    contains_even = 1;
                    int pow10 = 1;
                    for (int j = 0; j < len - i - 1; j++) {
                        pow10 *= 10;
                    }
                    num += pow10;
                    break;
                }
            }
            if (contains_even == 0) {
                break;
            }
        }
        System.out.println(
            "Smallest odd digits number not less than " + n
            + " is: " + num);
    }
}


C#




using System;
 
public class Program {
    public static void Main()
    {
        int n = 123456;
 
        int num = n;
 
        // If num is even, increment it by 1
        if (num % 2 == 0) {
            num++;
        }
 
        // While num contains even digits,
        // add a power of 10 to num such that the resulting
        // number has the same number of digits as num
        while (true) {
            bool contains_even = false;
            string str = num.ToString();
            int len = str.Length;
            for (int i = 0; i < len; i++) {
                if ((str[i] - '0') % 2 == 0) {
                    contains_even = true;
                    int pow10 = 1;
                    for (int j = 0; j < len - i - 1; j++) {
                        pow10 *= 10;
                    }
                    num += pow10;
                    break;
                }
            }
            if (!contains_even) {
                break;
            }
        }
 
        Console.WriteLine(
            "Smallest odd digits number not less than " + n
            + " is: " + num);
    }
}


Output

Smallest odd digits number not less than 123456 is: 133557

time complexity of O(log N) , Where N is given in the problem statement

 space complexity of O(1)


Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Last Updated : 11 Apr, 2023
Like Article
Save Article
Previous
Next
Similar Reads
Complete Tutorials