# Smallest odd digits number not less than N

• Last Updated : 22 Mar, 2023

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 ``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

 ` 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

 ``

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 ``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

 ``

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 ``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;``}`

## C

 `#include ``#include ` `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);`

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)

My Personal Notes arrow_drop_up