给定一个数N,我们需要编写一个程序来找到不大于N的最大数,它的所有数字都是偶数。 例如:
null
Input: N = 23Output: 22 Explanation: 22 is the largest number not greater then N which has all digits even. Input: N = 236Output: 228 Explanation: 228 is the largest number not greater than N which has all digits even.
天真的方法 :一种简单的方法是从N迭代到0,然后找到第一个所有数字都为偶数的数字。 以下是上述方法的实施情况:
C++
// CPP program to print the largest // integer not greater than N with all even digits #include <bits/stdc++.h> using namespace std; // function to check if all digits // are even of a given number int checkDigits( int n) { // iterate for all digits while (n) { if ((n % 10) % 2) // if digit is odd return 0; n /= 10; } // all digits are even return 1; } // function to return the largest number // with all digits even int largestNumber( int n) { // iterate till we find a // number with all digits even for ( int i = n;; i--) if (checkDigits(i)) return i; } // Driver Code int main() { int N = 23; cout << largestNumber(N); return 0; } |
JAVA
// Java program to print the largest // integer not greater than N with // all even digits import java .io.*; public class GFG { // function to check if all digits // are even of a given number static int checkDigits( int n) { // iterate for all digits while (n > 0 ) { // if digit is odd if (((n % 10 ) % 2 ) > 0 ) return 0 ; n /= 10 ; } // all digits are even return 1 ; } // function to return the largest // number with all digits even static int largestNumber( int n) { // iterate till we find a // number with all digits even for ( int i = n;; i--) if (checkDigits(i) > 0 ) return i; } // Driver Code static public void main (String[] args) { int N = 23 ; System.out.println(largestNumber(N)); } } // This code is contributed by vt_m. |
Python3
# Python3 program to print the largest # integer not greater than N with # all even digits # function to check if all digits # are even of a given number def checkDigits(n): # iterate for all digits while (n> 0 ): # if digit is odd if ((n % 10 ) % 2 ): return False ; n = int (n / 10 ); # all digits are even return True ; # function to return the # largest number with # all digits even def largestNumber(n): # Iterate till we find a # number with all digits even for i in range (n, - 1 , - 1 ): if (checkDigits(i)): return i; # Driver Code N = 23 ; print (largestNumber(N)); # This code is contributed by mits |
C#
// C# program to print the largest // integer not greater than N with // all even digits using System; public class GFG { // function to check if all digits // are even of a given number static int checkDigits( int n) { // iterate for all digits while (n > 0) { // if digit is odd if (((n % 10) % 2) > 0) return 0; n /= 10; } // all digits are even return 1; } // function to return the largest // number with all digits even static int largestNumber( int n) { // iterate till we find a // number with all digits even for ( int i = n;; i--) if (checkDigits(i) > 0) return i; } // Driver Code static public void Main () { int N = 23; Console.WriteLine(largestNumber(N)); } } // This code is contributed by aunj_67. |
PHP
<?php // PHP program to print the largest // integer not greater than N with // all even digits // function to check if all digits // are even of a given number function checkDigits( $n ) { // iterate for all digits while ( $n ) { // if digit is odd if (( $n % 10) % 2) return 0; $n /= 10; } // all digits are even return 1; } // function to return the // largest number with // all digits even function largestNumber( $n ) { // Iterate till we find a // number with all digits even for ( $i = $n ; ; $i --) if (checkDigits( $i )) return $i ; } // Driver Code $N = 23; echo (largestNumber( $N )); // This code is contributed by Ajit. ?> |
Javascript
<script> // javascript program to print the largest // integer not greater than N with // all even digits // function to check if all digits // are even of a given number function checkDigits(n) { // iterate for all digits while (n > 0) { // if digit is odd if (((n % 10) % 2) > 0) return 0; n = parseInt(n/ 10); } // all digits are even return 1; } // function to return the largest // number with all digits even function largestNumber(n) { // iterate till we find a // number with all digits even for (i = n;; i--) if (checkDigits(i) > 0) return i; } // Driver Code var N = 23; document.write(largestNumber(N)); // This code is contributed by shikhasingrajput </script> |
输出:
22
时间复杂性: O(N) 有效方法: 我们可以通过将N中的第一个奇数减少1,然后用最大的偶数(即8)替换该奇数右边的所有数字来获得所需的数字。例如,如果N=24578,那么X=24488。在某些情况下,这种方法可以创建前导0,在这种情况下,我们可以简单地删除前导0。例如,如果N=1334,那么X=0888。所以,我们的答案是X=888。如果N中没有奇数,那么N就是数字本身。 以下是上述方法的实施情况:
C++
// CPP program to print the largest // integer not greater than N with all even digits #include <bits/stdc++.h> using namespace std; // function to return the largest number // with all digits even int largestNumber( int n) { string s = "" ; int duplicate = n; // convert the number to a string for // easy operations while (n) { s = char (n % 10 + 48) + s; n /= 10; } int index = -1; // find first odd digit for ( int i = 0; i < s.length(); i++) { if ((s[i] - '0' ) % 2 & 1) { index = i; break ; } } // if no digit, then N is the answer if (index == -1) return duplicate; int num = 0; // till first odd digit, add all even numbers for ( int i = 0; i < index; i++) num = num * 10 + (s[i] - '0' ); // decrease 1 from the odd digit num = num * 10 + (s[index] - '0' - 1); // add 0 in the rest of the digits for ( int i = index + 1; i < s.length(); i++) num = num * 10 + 8; return num; } // Driver Code int main() { int N = 24578; cout << largestNumber(N); return 0; } |
JAVA
// Java program to print the largest // integer not greater than N with all even digits class GFG { // function to return the largest number // with all digits even static int largestNumber( int n) { String s = "" ; int duplicate = n; // convert the number to a string for // easy operations while (n > 0 ) { s = ( char )(n % 10 + 48 ) + s; n /= 10 ; } int index = - 1 ; // find first odd digit for ( int i = 0 ; i < s.length(); i++) { if (((( int )(s.charAt(i) - '0' ) % 2 ) & 1 ) > 0 ) { index = i; break ; } } // if no digit, then N is the answer if (index == - 1 ) return duplicate; int num = 0 ; // till first odd digit, add all even numbers for ( int i = 0 ; i < index; i++) num = num * 10 + ( int )(s.charAt(i) - '0' ); // decrease 1 from the odd digit num = num * 10 + (( int )s.charAt(index) - ( int )( '0' ) - 1 ); // add 0 in the rest of the digits for ( int i = index + 1 ; i < s.length(); i++) num = num * 10 + 8 ; return num; } // Driver Code public static void main (String[] args) { int N = 24578 ; System.out.println(largestNumber(N)); } } // This code is contributed by mits |
Python3
# Python3 program to print the largest # integer not greater than N with # all even digits import math as mt # function to return the largest # number with all digits even def largestNumber(n): s = "" duplicate = n # convert the number to a string # for easy operations while (n > 0 ): s = chr (n % 10 + 48 ) + s n = n / / 10 index = - 1 # find first odd digit for i in range ( len (s)): if (( ord (s[i]) - ord ( '0' )) % 2 & 1 ): index = i break # if no digit, then N is the answer if (index = = - 1 ): return duplicate num = 0 # till first odd digit, add all # even numbers for i in range (index): num = num * 10 + ( ord (s[i]) - ord ( '0' )) # decrease 1 from the odd digit num = num * 10 + ( ord (s[index]) - ord ( '0' ) - 1 ) # add 0 in the rest of the digits for i in range (index + 1 , len (s)): num = num * 10 + 8 return num # Driver Code N = 24578 print (largestNumber(N)) # This code is contributed # by Mohit kumar 29 |
C#
// C# program to print the largest // integer not greater than N with all even digits using System; class GFG { // function to return the largest number // with all digits even static int largestNumber( int n) { string s = "" ; int duplicate = n; // convert the number to a string for // easy operations while (n > 0) { s = ( char )(n % 10 + 48) + s; n /= 10; } int index = -1; // find first odd digit for ( int i = 0; i < s.Length; i++) { if (((( int )(s[i] - '0' ) % 2) & 1) > 0) { index = i; break ; } } // if no digit, then N is the answer if (index == -1) return duplicate; int num = 0; // till first odd digit, add all even numbers for ( int i = 0; i < index; i++) num = num * 10 + ( int )(s[i] - '0' ); // decrease 1 from the odd digit num = num * 10 + (( int )s[index] - ( int )( '0' ) - 1); // add 0 in the rest of the digits for ( int i = index + 1; i < s.Length; i++) num = num * 10 + 8; return num; } // Driver Code static void Main() { int N = 24578; Console.WriteLine(largestNumber(N)); } } // This code is contributed by mits |
PHP
<?php // PHP program to print the largest // integer not greater than N with all even digits // function to return the largest number // with all digits even function largestNumber( $n ) { $s = "" ; $duplicate = $n ; // convert the number to a string for // easy operations while ( $n ) { $s = chr ( $n % 10 + 48). $s ; $n =(int)( $n /10); } $index = -1; // find first odd digit for ( $i = 0; $i < strlen ( $s ); $i ++) { if (ord( $s [ $i ] - '0' ) % 2 & 1) { $index = $i ; break ; } } // if no digit, then N is the answer if ( $index == -1) return $duplicate ; $num = 0; // till first odd digit, add all even numbers for ( $i = 0; $i < $index ; $i ++) $num = $num * 10 + (ord( $s [ $i ]) - ord( '0' )); // decrease 1 from the odd digit $num = $num * 10 + ((ord( $s [ $i ]) - ord( '0' )) - 1); // add 0 in the rest of the digits for ( $i = $index + 1; $i < strlen ( $s ); $i ++) $num = $num * 10 + 8; return $num ; } // Driver Code $N = 24578; echo largestNumber( $N ); // This code is contributed by mits ?> |
Javascript
<script> // javascript program to print the largest // integer not greater than N with all even digits // function to return the largest number // with all digits even function largestNumber(n) { var s = "" ; var duplicate = n; // convert the number to a string for // easy operations while (n > 0) { s = String.fromCharCode(n % 10 + 48) + s; n = parseInt(n/10); } var index = -1; // find first odd digit for (i = 0; i < s.length; i++) { if ((((s.charAt(i).charCodeAt(0) - '0' .charCodeAt(0)) % 2) & 1) > 0) { index = i; break ; } } // if no digit, then N is the answer if (index == -1) return duplicate; var num = 0; // till first odd digit, add all even numbers for (i = 0; i < index; i++) num = num * 10 + (s.charAt(i).charCodeAt(0) - '0' .charCodeAt(0)); // decrease 1 from the odd digit num = num * 10 + (s.charAt(index).charCodeAt(0) - ( '0' ).charCodeAt(0) - 1); // add 0 in the rest of the digits for (i = index + 1; i < s.length; i++) num = num * 10 + 8; return num; } // Driver Code var N = 24578; document.write(largestNumber(N)); // This code contributed by shikhasingrajput </script> |
输出:
24488
时间复杂性: O(M),其中M是位数
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END