数値が回文かどうかを確認する
正の整数を指定して、指定された数値が回文の場合は true を返し、それ以外の場合は false を返す関数を作成します。たとえば、12321 は回文ですが、1451 は回文ではありません。
方法 1:
与えられた数字を次のようにします 1つで 。この問題に対する簡単な方法は、まず次のとおりです。 の数字を逆にする 1つで 、次にその逆を比較します。 1つで と 1つで 。両方が同じ場合は true を返し、そうでない場合は false を返します。
以下は、次のメソッド #2 からインスピレーションを得た興味深いメソッドです。 これ 役職。アイデアは、のコピーを作成することです 1つで そして参照によってコピーを再帰的に渡し、そして渡します 1つで 価値観によって。再帰呼び出しでは、除算します。 1つで 再帰ツリーを下に移動しながら 10 ずつ増加します。再帰ツリーを上に移動しながら、コピーを 10 で除算します。すべての子呼び出しが終了した関数でこれらが一致すると、最後の桁が 1つで は先頭から i 番目の桁となり、コピーの最後の桁は末尾から i 番目の桁になります。
C++
// A recursive C++ program to check> // whether a given number> // is palindrome or not> #include> using> namespace> std;> > // A function that returns true only> // if num contains one> // digit> int> oneDigit(> int> num)> {> > > // Comparison operation is faster> > // than division> > // operation. So using following> > // instead of 'return num> > // / 10 == 0;'> > return> (num>= 0 && 番号 <10);> }> > // A recursive function to find> // out whether num is> // palindrome or not. Initially, dupNum> // contains address of> // a copy of num.> bool> isPalUtil(> int> num,> int> * dupNum)> {> > > // Base case (needed for recursion> > // termination): This> > // statement mainly compares the> > // first digit with the> > // last digit> > if> (oneDigit(num))> > return> (num == (*dupNum) % 10);> > > // This is the key line in this> > // method. Note that all> > // recursive calls have a separate> > // copy of num, but they> > // all share same copy of *dupNum.> > // We divide num while> > // moving up the recursion tree> > if> (!isPalUtil(num / 10, dupNum))> > return> false> ;> > > // The following statements are> > // executed when we move up> > // the recursion call tree> > *dupNum /= 10;> > > // At this point, if num%10 contains> > // i'th digit from> > // beginning, then (*dupNum)%10> > // contains i'th digit> > // from end> > return> (num % 10 == (*dupNum) % 10);> }> > // The main function that uses> // recursive function> // isPalUtil() to find out whether> // num is palindrome or not> int> isPal(> int> num)> {> > > // Check if num is negative,> > // make it positive> > if> (num <0)> > num = -num;> > > // Create a separate copy of num,> > // so that modifications> > // made to address dupNum don't> > // change the input number.> > // *dupNum = num> > int> * dupNum => new> int> (num);> > > return> isPalUtil(num, dupNum);> }> > // Driver program to test> // above functions> int> main()> {> > int> n = 12321;> > isPal(n) ? cout < <> 'Yes
'> : cout < <> 'No'> < < endl;> > > n = 12;> > isPal(n) ? cout < <> 'Yes
'> : cout < <> 'No'> < < endl;> > > n = 88;> > isPal(n) ? cout < <> 'Yes
'> : cout < <> 'No'> < < endl;> > > n = 8999;> > isPal(n) ? cout < <> 'Yes
'> : cout < <> 'No'> ;> > return> 0;> }> > // this code is contributed by shivanisinghss2110> |
C
#include> #include> > // A function that returns true only> // if num contains one digit> int> oneDigit(> int> num)> {> > // Comparison operation is faster> > // than division operation.> > // So using the following instead of 'return num / 10 == 0;'> > return> (num>= 0 && 番号 <10);> }> > // A recursive function to find out whether> // num is palindrome or not.> // Initially, dupNum contains the address of a copy of num.> bool> isPalUtil(> int> num,> int> * dupNum)> {> > // Base case (needed for recursion termination):> > // This statement mainly compares the first digit with the last digit.> > if> (oneDigit(num))> > return> (num == (*dupNum) % 10);> > > // This is the key line in this method.> > // Note that all recursive calls have a separate copy of num,> > // but they all share the same copy of *dupNum.> > // We divide num while moving up the recursion tree.> > if> (!isPalUtil(num / 10, dupNum))> > return> false> ;> > > // The following statements are executed when we move up the recursion call tree.> > *dupNum /= 10;> > > // At this point, if num % 10 contains the i'th digit from the beginning,> > // then (*dupNum) % 10 contains the i'th digit from the end.> > return> (num % 10 == (*dupNum) % 10);> }> > // The main function that uses the recursive function> // isPalUtil() to find out whether num is palindrome or not.> bool> isPal(> int> num)> {> > // Check if num is negative, make it positive.> > if> (num <0)> > num = -num;> > > // Create a separate copy of num, so that modifications> > // made to the address dupNum don't change the input number.> > int> dupNum = num;> > > return> isPalUtil(num, &dupNum);> }> > // Driver program to test above functions> int> main()> {> > int> n = 12321;> > isPal(n) ?> printf> (> 'Yes
'> ) :> printf> (> 'No
'> );> > > n = 12;> > isPal(n) ?> printf> (> 'Yes
'> ) :> printf> (> 'No
'> );> > > n = 88;> > isPal(n) ?> printf> (> 'Yes
'> ) :> printf> (> 'No
'> );> > > n = 8999;> > isPal(n) ?> printf> (> 'Yes
'> ) :> printf> (> 'No
'> );> > > return> 0;> }> |
ジャワ
// A recursive Java program to> // check whether a given number> // is palindrome or not> import> java.io.*;> import> java.util.*;> > public> class> CheckPalindromeNumberRecursion {> > > // A function that returns true> > // only if num contains one digit> > public> static> int> oneDigit(> int> num) {> > > if> ((num>=>> );> > }> catch> (Exception e) {> > System.out.println(> 'No'> );> > }> > n => 1231> ;> > try> {> > isPal(n);> > System.out.println(> 'Yes'> );> > }> catch> (Exception e) {> > System.out.println(> 'No'> );> > }> > > n => 12> ;> > try> {> > isPal(n);> > System.out.println(> 'Yes'> );> > }> catch> (Exception e) {> > System.out.println(> 'No'> );> > }> > > n => 88> ;> > try> {> > isPal(n);> > System.out.println(> 'Yes'> );> > }> catch> (Exception e) {> > System.out.println(> 'No'> );> > }> > > n => 8999> ;> > try> {> > isPal(n);> > System.out.println(> 'Yes'> );> > }> catch> (Exception e) {> > System.out.println(> 'No'> );> > }> > }> }> > // This code is contributed> // by Nasir J> |
Python3
# A recursive Python3 program to check> # whether a given number is palindrome or not> > # A function that returns true> # only if num contains one digit> def> oneDigit(num):> > > # comparison operation is faster> > # than division operation. So> > # using following instead of> > # 'return num / 10 == 0;'> > return> ((num>>> => 0> )> and> > (num <> 10> ))> > # A recursive function to find> # out whether num is palindrome> # or not. Initially, dupNum> # contains address of a copy of num.> def> isPalUtil(num, dupNum):> > > # Base case (needed for recursion> > # termination): This statement> > # mainly compares the first digit> > # with the last digit> > if> oneDigit(num):> > return> (num> => => (dupNum[> 0> ])> %> 10> )> > > # This is the key line in this> > # method. Note that all recursive> > # calls have a separate copy of> > # num, but they all share same> > # copy of *dupNum. We divide num> > # while moving up the recursion tree> > if> not> isPalUtil(num> /> /> 10> , dupNum):> > return> False> > > # The following statements are> > # executed when we move up the> > # recursion call tree> > dupNum[> 0> ]> => dupNum[> 0> ]> /> /> 10> > > # At this point, if num%10> > # contains i'th digit from> > # beginning, then (*dupNum)%10> > # contains i'th digit from end> > return> (num> %> 10> => => (dupNum[> 0> ])> %> 10> )> > # The main function that uses> # recursive function isPalUtil()> # to find out whether num is> # palindrome or not> def> isPal(num):> > # If num is negative,> > # make it positive> > if> (num <> 0> ):> > num> => (> -> num)> > > # Create a separate copy of> > # num, so that modifications> > # made to address dupNum> > # don't change the input number.> > dupNum> => [num]> # *dupNum = num> > > return> isPalUtil(num, dupNum)> > # Driver Code> n> => 12321> if> isPal(n):> > print> (> 'Yes'> )> else> :> > print> (> 'No'> )> > n> => 12> if> isPal(n) :> > print> (> 'Yes'> )> else> :> > print> (> 'No'> )> > n> => 88> if> isPal(n) :> > print> (> 'Yes'> )> else> :> > print> (> 'No'> )> > n> => 8999> if> isPal(n) :> > print> (> 'Yes'> )> else> :> > print> (> 'No'> )> > # This code is contributed by mits> |
C#
// A recursive C# program to> // check whether a given number> // is palindrome or not> using> System;> > class> GFG> {> > // A function that returns true> // only if num contains one digit> public> static> int> oneDigit(> int> num)> {> > // comparison operation is> > // faster than division> > // operation. So using> > // following instead of> > // 'return num / 10 == 0;'> > if> ((num>= 0) &&(数値 <10))> > return> 1;> > else> > return> 0;> }> > // A recursive function to> // find out whether num is> // palindrome or not.> // Initially, dupNum contains> // address of a copy of num.> public> static> int> isPalUtil(> int> num,> > int> dupNum)> {> > // Base case (needed for recursion> > // termination): This statement> > // mainly compares the first digit> > // with the last digit> > if> (oneDigit(num) == 1)> > if> (num == (dupNum) % 10)> > return> 1;> > else> > return> 0;> > > // This is the key line in> > // this method. Note that> > // all recursive calls have> > // a separate copy of num,> > // but they all share same> > // copy of *dupNum. We divide> > // num while moving up the> > // recursion tree> > if> (isPalUtil((> int> )(num / 10), dupNum) == 0)> > return> -1;> > > // The following statements> > // are executed when we move> > // up the recursion call tree> > dupNum = (> int> )(dupNum / 10);> > > // At this point, if num%10> > // contains i'th digit from> > // beginning, then (*dupNum)%10> > // contains i'th digit from end> > if> (num % 10 == (dupNum) % 10)> > return> 1;> > else> > return> 0;> }> > // The main function that uses> // recursive function isPalUtil()> // to find out whether num is> // palindrome or not> public> static> int> isPal(> int> num)> {> > // If num is negative,> > // make it positive> > if> (num <0)> > num = (-num);> > > // Create a separate copy> > // of num, so that modifications> > // made to address dupNum> > // don't change the input number.> > int> dupNum = (num);> // *dupNum = num> > > return> isPalUtil(num, dupNum);> }> > // Driver Code> public> static> void> Main()> {> int> n = 12321;> if> (isPal(n) == 0)> > Console.WriteLine(> 'Yes'> );> else> > Console.WriteLine(> 'No'> );> > n = 12;> if> (isPal(n) == 0)> > Console.WriteLine(> 'Yes'> );> else> > Console.WriteLine(> 'No'> );> > n = 88;> if> (isPal(n) == 1)> > Console.WriteLine(> 'Yes'> );> else> > Console.WriteLine(> 'No'> );> > n = 8999;> if> (isPal(n) == 0)> > Console.WriteLine(> 'Yes'> );> else> > Console.WriteLine(> 'No'> );> }> }> > // This code is contributed by mits> |
JavaScript
> // A recursive javascript program to> // check whether a given number> // is palindrome or not> > > // A function that returns true> > // only if num contains one digit> > function> oneDigit(num) {> > > if> ((num>= 0) && (数値 <10))> > return> 1;> > else> > return> 0;> > }> > > function> isPalUtil> > (num , dupNum) {> > > // base condition to return once we> > // move past first digit> > if> (num == 0) {> > return> dupNum;> > }> else> {> > dupNum = isPalUtil(parseInt(num / 10), dupNum);> > }> > > // Check for equality of first digit of> > // num and dupNum> > if> (num % 10 == dupNum % 10) {> > // if first digit values of num and> > // dupNum are equal divide dupNum> > // value by 10 to keep moving in sync> > // with num.> > return> parseInt(dupNum / 10);> > }> else> {> > // At position values are not> > // matching throw exception and exit.> > // no need to proceed further.> > throw> e;> > }> > > }> > > function> isPal(num)> > {> > > if> (num <0)> > num = (-num);> > > var> dupNum = (num);> > > return> isPalUtil(num, dupNum);> > }> > > > > var> n = 1242;> > try> {> > isPal(n);> > document.write(> ' Yes'> );> > }> catch> (e) {> > document.write(> ' No'> );> > }> > n = 1231;> > try> {> > isPal(n);> > document.write(> ' Yes'> );> > }> catch> (e) {> > document.write(> ' No'> );> > }> > > n = 12;> > try> {> > isPal(n);> > document.write(> ' Yes'> );> > }> catch> (e) {> > document.write(> ' No'> );> > }> > > n = 88;> > try> {> > isPal(n);> > document.write(> ' Yes'> );> > }> catch> (e) {> > document.write(> ' No'> );> > }> > > n = 8999;> > try> {> > isPal(n);> > document.write(> ' Yes'> );> > }> catch> (e) {> > document.write(> ' No'> );> > }> > // This code is contributed by Amit Katiyar> > |
PHP
// A recursive PHP program to // check whether a given number // is palindrome or not // A function that returns true // only if num contains one digit function oneDigit($num) { // comparison operation is faster // than division operation. So // using following instead of // 'return num / 10 == 0;' return (($num>= 0) && ($num <10)); } // A recursive function to find // out whether num is palindrome // or not. Initially, dupNum // contains address of a copy of num. function isPalUtil($num, $dupNum) { // Base case (needed for recursion // termination): This statement // mainly compares the first digit // with the last digit if (oneDigit($num)) return ($num == ($dupNum) % 10); // This is the key line in this // method. Note that all recursive // calls have a separate copy of // num, but they all share same // copy of *dupNum. We divide num // while moving up the recursion tree if (!isPalUtil((int)($num / 10), $dupNum)) return -1; // The following statements are // executed when we move up the // recursion call tree $dupNum = (int)($dupNum / 10); // At this point, if num%10 // contains i'th digit from // beginning, then (*dupNum)%10 // contains i'th digit from end return ($num % 10 == ($dupNum) % 10); } // The main function that uses // recursive function isPalUtil() // to find out whether num is // palindrome or not function isPal($num) { // If num is negative, // make it positive if ($num <0) $num = (-$num); // Create a separate copy of // num, so that modifications // made to address dupNum // don't change the input number. $dupNum = ($num); // *dupNum = num return isPalUtil($num, $dupNum); } // Driver Code $n = 12321; if(isPal($n) == 0) echo 'Yes
'; else echo 'No
'; $n = 12; if(isPal($n) == 0) echo 'Yes
'; else echo 'No
'; $n = 88; if(isPal($n) == 1) echo 'Yes
'; else echo 'No
'; $n = 8999; if(isPal($n) == 0) echo 'Yes
'; else echo 'No
'; // This code is contributed by m_kit ?>>> |
出力
Yes No Yes No
時間計算量: O(log n)
補助スペース: O(log n)
余分なスペースを使用せずに数値が回文かどうかを確認するには
方法 2:string() メソッドを使用する
- その数字の桁数が10桁を超える場合 18 、long long int の範囲が指定された数値を満たしていないため、その数値を整数として受け取ることはできません。
- したがって、入力を文字列として受け取り、開始から長さ/2までループを実行し、文字列の最初の文字(数値)から最後の文字まで、そして最後から2番目の文字まで、というようにチェックします。文字が一致しない場合、文字列は回文にはならないでしょう。
以下は上記のアプローチの実装です
C++14
// C++ implementation of the above approach> #include> using> namespace> std;> > // Function to check palindrome> int> checkPalindrome(string str)> {> > // Calculating string length> > int> len = str.length();> > > // Traversing through the string> > // upto half its length> > for> (> int> i = 0; i // Comparing i th character // from starting and len-i // th character from end if (str[i] != str[len - i - 1]) return false; } // If the above loop doesn't return then it is // palindrome return true; } // Driver Code int main() { // taking number as string string st = '112233445566778899000000998877665544332211'; if (checkPalindrome(st) == true) cout < < 'Yes'; else cout < < 'No'; return 0; } // this code is written by vikkycirus> |
ジャワ
// Java implementation of the above approach> import> java.io.*;> > class> GFG{> > // Function to check palindrome> static> boolean> checkPalindrome(String str)> {> > > // Calculating string length> > int> len = str.length();> > > // Traversing through the string> > // upto half its length> > for> (> int> i => 0> ; i 2; i++) { // Comparing i th character // from starting and len-i // th character from end if (str.charAt(i) != str.charAt(len - i - 1)) return false; } // If the above loop doesn't return then // it is palindrome return true; } // Driver Code public static void main(String[] args) { // Taking number as string String st = '112233445566778899000000998877665544332211'; if (checkPalindrome(st) == true) System.out.print('Yes'); else System.out.print('No'); } } // This code is contributed by subhammahato348> |
Python3
# Python3 implementation of the above approach> > # function to check palindrome> def> checkPalindrome(> str> ):> > > # Run loop from 0 to len/2> > for> i> in> range> (> 0> ,> len> (> str> )> /> /> 2> ):> > if> str> [i] !> => str> [> len> (> str> )> -> i> -> 1> ]:> > return> False> > > # If the above loop doesn't> > #return then it is palindrome> > return> True> > > # Driver code> st> => '112233445566778899000000998877665544332211'> if> (checkPalindrome(st)> => => True> ):> > print> (> 'it is a palindrome'> )> else> :> > print> (> 'It is not a palindrome'> )> |
C#
// C# implementation of the above approach> using> System;> > class> GFG{> > // Function to check palindrome> static> bool> checkPalindrome(> string> str)> {> > > // Calculating string length> > int> len = str.Length;> > > // Traversing through the string> > // upto half its length> > for> (> int> i = 0; i { // Comparing i th character // from starting and len-i // th character from end if (str[i] != str[len - i - 1]) return false; } // If the above loop doesn't return then // it is palindrome return true; } // Driver Code public static void Main() { // Taking number as string string st = '112233445566778899000000998877665544332211'; if (checkPalindrome(st) == true) Console.Write('Yes'); else Console.Write('No'); } } // This code is contributed by subhammahato348> |
JavaScript
> > // Javascript implementation of the above approach> > // Function to check palindrome> function> checkPalindrome(str)> {> > // Calculating string length> > var> len = str.length;> > > // Traversing through the string> > // upto half its length> > for> (> var> i = 0; i // Comparing ith character // from starting and len-ith // character from end if (str[i] != str[len - i - 1]) return false; } // If the above loop doesn't return then it is // palindrome return true; } // Driver Code // taking number as string let st = '112233445566778899000000998877665544332211'; if (checkPalindrome(st) == true) document.write('Yes'); else document.write('No'); // This code is contributed by Mayank Tyagi> |
出力
Yes
時間計算量: O(|str|)
補助スペース :O(1)
方法 3:
ここでは、数値が回文であるかどうかを確認する最も簡単な方法を示します。このアプローチは、指定された数値の桁数が 10^18 未満の場合に使用できます。その数値の桁数が 10^18 を超えると、long long の範囲であるため、その数値を整数として受け取ることができないからです。 int が指定された数値を満たしていません。
指定された数値が回文であるかどうかを確認するには、指定された数値の桁を反転し、その数値を反転したものが元の数値と等しいかどうかを確認します。数値の逆がその数値と等しい場合、その数値は回文になります。そうでない場合は、回文ではありません。
C++
// C++ program to check if a number is Palindrome> #include> using> namespace> std;> // Function to check Palindrome> bool> checkPalindrome(> int> n)> {> > int> reverse = 0;> > int> temp = n;> > while> (temp != 0) {> > reverse = (reverse * 10) + (temp % 10);> > temp = temp / 10;> > }> > return> (reverse> > == n);> // if it is true then it will return 1;> > // else if false it will return 0;> }> int> main()> {> > int> n = 7007;> > if> (checkPalindrome(n) == 1) {> > cout < <> 'Yes
'> ;> > }> > else> {> > cout < <> 'No
'> ;> > }> > return> 0;> }> // This code is contributed by Suruchi Kumari> |
ジャワ
/*package whatever //do not write package name here */> > import> java.io.*;> > class> GFG {> > // Java program to check if a number is Palindrome> > > // Function to check Palindrome> > static> boolean> checkPalindrome(> int> n)> > {> > int> reverse => 0> ;> > int> temp = n;> > while> (temp !=> 0> ) {> > reverse = (reverse *> 10> ) + (temp %> 10> );> > temp = temp /> 10> ;> > }> > return> (reverse == n);> // if it is true then it will return 1;> > // else if false it will return 0;> > }> > > // Driver Code> > public> static> void> main(String args[])> > {> > int> n => 7007> ;> > if> (checkPalindrome(n) ==> true> ) {> > System.out.println(> 'Yes'> );> > }> > else> {> > System.out.println(> 'No'> );> > }> > }> }> > // This code is contributed by shinjanpatra> |
Python3
# Python3 program to check if a number is Palindrome> > # Function to check Palindrome> def> checkPalindrome(n):> > > reverse> => 0> > temp> => n> > while> (temp !> => 0> ):> > reverse> => (reverse> *> 10> )> +> (temp> %> 10> )> > temp> => temp> /> /> 10> > > return> (reverse> => => n)> # if it is true then it will return 1;> > # else if false it will return 0;> > # driver code> n> => 7007> if> (checkPalindrome(n)> => => 1> ):> > print> (> 'Yes'> )> > else> :> > print> (> 'No'> )> > # This code is contributed by shinjanpatra> |
C#
// C# program to check if a number is Palindrome> > using> System;> > class> GFG {> > > // Function to check Palindrome> > static> bool> checkPalindrome(> int> n)> > {> > int> reverse = 0;> > int> temp = n;> > while> (temp != 0) {> > reverse = (reverse * 10) + (temp % 10);> > temp = temp / 10;> > }> > return> (> > reverse> > == n);> // if it is true then it will return 1;> > // else if false it will return 0;> > }> > > // Driver Code> > public> static> void> Main(> string> [] args)> > {> > int> n = 7007;> > if> (checkPalindrome(n) ==> true> ) {> > Console.WriteLine(> 'Yes'> );> > }> > else> {> > Console.WriteLine(> 'No'> );> > }> > }> }> > // This code is contributed by phasing17> |
JavaScript
> > // JavaScript program to check if a number is Palindrome> > // Function to check Palindrome> function> checkPalindrome(n)> {> > let reverse = 0;> > let temp = n;> > while> (temp != 0) {> > reverse = (reverse * 10) + (temp % 10);> > temp = Math.floor(temp / 10);> > }> > return> (reverse == n);> // if it is true then it will return 1;> > // else if false it will return 0;> }> > // driver code> > let n = 7007;> if> (checkPalindrome(n) == 1) {> > document.write(> 'Yes'> ,> ''> );> }> else> {> > document.write(> 'No'> ,> ''> );> }> > > // This code is contributed by shinjanpatra> > > |
出力
Yes
時間計算量 : O(ログ 10 (n)) または O(指定された数値の桁数)
補助スペース : O(1) または定数
この記事をまとめたのは、 アシッシュ・バーンウォル 。