回文数プログラム Java while と for ループの使用
⚡ スマートサマリー
回文数プログラム Java 数値の桁を反転させることで、順方向と逆方向で同じ値になるかどうかを判定します。この記事では、アルゴリズム、whileループ版、forループ版、文字列ベースの方法、再帰、エッジケース、および検証済みの出力を含む計算量解析について説明します。
回文数とは何ですか?
A 回文番号 回文とは、数字を逆にしても元の数と同じになる数のことです。例えば、131。数字を逆にしても元の数と同じになります。回文数は、縦軸に対して鏡像対称性を持っています。同じ考え方は、文字を逆にしても綴りが同じになる単語にも当てはまります。
回文数の例 Java
121, 393, 34043, 111, 555, 48084
回文の例
LOL, MADAM
定義上、0から9までのすべての数字は回文である。なぜなら、1桁の数字を逆にしても、同じ数字になるからである。
回文数アルゴリズム
以下は回文数アルゴリズムのロジックです。 Java:
- であるかどうかを確認する必要がある入力番号を取得します。 回文.
- その数値を一時変数にコピーし、逆順にする。
- 反転した数値と元の数値を比較します。
- それらが同じであれば、その数は「回文数」である。
- そうでなければ、その数は「回文数」ではない。
注意が必要なのは反転処理だけです。2つの算術演算ですべての処理が完了し、以下の表で確認できます。 tracそれらを171の値で使用します。
| 合格 | a(残りの数) | lastDigit = a % 10 | 合計 = (合計 * 10) + 最後のDigit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
最終処理後、合計値は171となり、これは元の入力値と等しいため、この数値は回文であることが確認されました。
入力された数値が回文かどうかを確認する方法
以下は回文プログラムです Java WHILEループを使用します。ループは数字が残っている間継続し、print文によって各処理中にすべての変数の状態が明らかになります。
package com.guru99; public class PalindromeNum { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 171; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number while(a > 0) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; a = a / 10; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code 出力:
Input Number 171 Last Digit 1 Digit 1 was added to sum 0 Input Number 17 Last Digit 7 Digit 7 was added to sum 10 Input Number 1 Last Digit 1 Digit 1 was added to sum 170 Number is palindrome
forループを使って回文をチェックするプログラム
以下である Java forループを使用して回文を検出するプログラム。ヘッダーには終了条件と除算が含まれているため、ループ本体では再度除算を行ってはなりません。
package com.guru99; public class PalindromeNumForLoop { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 185; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number for( ; a != 0; a /= 10 ) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code 出力:
Input Number 185 Last Digit 5 Digit 5 was added to sum 0 Input Number 18 Last Digit 8 Digit 8 was added to sum 50 Input Number 1 Last Digit 1 Digit 1 was added to sum 580 Number is not palindrome
⚠️ 警告: よくある間違いは、 a = a / 10; forループ本体内で、ヘッダーに既に a /= 10すると、その数字は1回の処理で2回分割され、半分の桁がスキップされるため、121のような真の回文数が回文数ではないと誤って報告されます。
回文プログラム Java 文字列の使用 Reverse
値をテキストに変換することで、StringBuilderは一度の呼び出しで値を反転させることができます。この方法は、数値によるアプローチでは処理できない単語にも有効です。
package com.guru99; public class PalindromeString { public static boolean isPalindrome(String text) { // ignore case so MADAM and madam behave identically String clean = text.toLowerCase(); String reversed = new StringBuilder(clean).reverse().toString(); return clean.equals(reversed); } public static void main(String[] args) { System.out.println(isPalindrome("121")); System.out.println(isPalindrome("MADAM")); System.out.println(isPalindrome("Java")); } }
Code 出力:
true true false
回文プログラム Java 再帰の使用
再帰処理では、まず最も外側の2文字を比較し、次に縮小していく中央部分で自身を呼び出します。残りの文字数が2文字未満になると、処理は停止します。
package com.guru99; public class PalindromeRecursion { public static boolean isPalindrome(String text, int left, int right) { // base case: pointers met or crossed if (left >= right) { return true; } if (text.charAt(left) != text.charAt(right)) { return false; } return isPalindrome(text, left + 1, right - 1); } public static void main(String[] args) { String value = "34043"; System.out.println(value + " is palindrome: " + isPalindrome(value, 0, value.length() - 1)); String other = "12345"; System.out.println(other + " is palindrome: " + isPalindrome(other, 0, other.length() - 1)); } }
Code 出力:
34043 is palindrome: true 12345 is palindrome: false
エッジケースとメソッドの比較
3つの入力項目は単純な実装では動作しないため、すべてのバージョンは使用前にこれらの項目に対してテストを行う必要がある。
- 負の数: -121のような値は、末尾にマイナス記号に対応するものがないため、決して回文にはなりません。
if (inputNumber < 0) return false;. - 末尾のゼロ: 値100は反転して1になるため、比較結果は正しくfalseとなる。末尾が0の値の中で、通過するのは0自身のみである。
- 整数オーバーフロー: Rev1,999,999,999 のような大きな整数を入力すると、int 型の範囲を超える可能性があります。入力値が制限値に近づく可能性がある場合は、sum を long 型として宣言してください。
以下の表は、このページで紹介されている4つのアプローチを比較したものです。
| 方法 | 時間の複雑さ | スペースの複雑さ | 言葉のための作品 | Notes |
|---|---|---|---|---|
| ループ | O(log n) | O(1) | いいえ | 数字の反転を最も明確に示す例 |
| ループの場合 | O(log n) | O(1) | いいえ | 同一のロジック、ヘッダーのみでの分割 |
| StringBuilder 逆 | O(N) | O(N) | はい | 最短コードで、新しい文字列を割り当てます |
| 再帰 | O(N) | O(n)スタック | はい | 再帰に関する面接での議論に役立ちます |
数字extracここで使用されているパターンは、多くの練習問題で再び現れます。 フィボナッチ数列 Java Java 素数をチェックするプログラム Bubbleソートアルゴリズム Javaループ構文自体については、以下を参照してください。 各ループについて Java そしてより広い Java チュートリアル、そして見る Java ストリング テキストベースの方法の場合。

