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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

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

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

Output:

```3111
```

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

My Personal Notes arrow_drop_up