# Smallest odd digits number not less than N

• Last Updated : 16 Oct, 2022

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

My Personal Notes arrow_drop_up
Related Articles