回文数プログラム Java while と for ループの使用

⚡ スマートサマリー

回文数プログラム Java 数値の桁を反転させることで、順方向と逆方向で同じ値になるかどうかを判定します。この記事では、アルゴリズム、whileループ版、forループ版、文字列ベースの方法、再帰、エッジケース、および検証済みの出力を含む計算量解析について説明します。

  • 🔁 コア定義: 回文数とは、131、393、34043のように、桁を逆にしても変化しない数のことです。
  • Reversalテクニック: 剰余演算子tracts は最後の桁で、整数除算でそれを削除します。1 回の処理で 1 桁ずつ削除します。
  • 🧮 アキュムレータルール: 各パスでは、新たに追加された値を加える前に、累積合計を10倍します。tracテッド・デジット。
  • 🔂 ループ選択: whileループとforループは、各反復処理で除算が正確に1回だけ発生する限り、同じ結果を生成します。
  • 🔤 文字列メソッド: StringBuilderのreverseはテキストを直接比較し、単語だけでなく数字にも対応します。
  • ⚠️ エッジケース: 一桁の数値は常に回文であり、負の数値は決して回文ではなく、末尾のゼロは数値比較を破綻させる。
  • 豪華<XNUMXxXNUMXF><XNUMXxXNUMXF><XNUMXxBXNUMX><XNUMXxBXNUMX>️ 複雑性プロファイル: どちらのループバージョンも、桁数に比例したO(log n)の時間で実行され、O(1)の追加スペースを使用します。

回文数プログラム Java

回文数とは何ですか?

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つの入力項目は単純な実装では動作しないため、すべてのバージョンは使用前にこれらの項目に対してテストを行う必要がある。

  1. 負の数: -121のような値は、末尾にマイナス記号に対応するものがないため、決して回文にはなりません。 if (inputNumber < 0) return false;.
  2. 末尾のゼロ: 値100は反転して1になるため、比較結果は正しくfalseとなる。末尾が0の値の中で、通過するのは0自身のみである。
  3. 整数オーバーフロー: 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 ストリング テキストベースの方法の場合。

よくあるご質問

いいえ。マイナス記号は先頭にしか現れないため、-121 を逆にすると 121- となり、一致しません。ゼロ未満の値に対しては false を返すように、早期にガードを追加してください。

乗算では、既に収集された桁が1桁左に移動し、新しい桁のために1の位が解放されます。tracted digit。これは数字を逆順に再構築します。

反転した値は、整数の最大値である2147483647を超え、負の値にラップアラウンドする可能性があります。アキュムレータをlong型として宣言するか、値を文字列として比較してください。

ScannerとnextIntを使って値を読み取り、同じ反転ロジックに渡します。読み取り処理をtryブロックで囲むことで、数値以外の入力によってプログラムがクラッシュするのを防ぎます。

コードレビューを明示的に依頼された場合は、通常は「はい」と答えます。依頼がなくても問題が指摘されることは稀なので、見落とした例を鵜呑みにするのではなく、121のような既知の回文を使って必ずテストしてください。

この問題は、ループ制御、整数演算、およびエッジケース推論の能力をわずか数行でテストするものです。また、受験者がAIが生成したコードを提出前に検証しているかどうかも明らかになります。