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:
// 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 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 |
# 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# 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 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 ?> |
<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> |
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:
// 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 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 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# 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 |
<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> |
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.
#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) |
#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;
} |
# 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 )
|
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);
|
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);
}
} |
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);
}
} |
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)