# Smallest odd digits number not less than N

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;` `}` `// this code is contributed by thebeginner01(Akash Bankar)`

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

## 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!

Previous
Next