Javaで回文数を判定する:while文とfor文を使ったアルゴリズム
回文数とは
回文数とは、前から読んでも後ろから読んでも同じ数のことです。例として121、393、48084などがあります。これらは垂直軸対称性を持ち、アルゴリズムパズルでよく扱われます。
Javaでは、回文判定は面接問題やコーディング課題で頻出します。アルゴリズムはシンプルですが、複数の実装方法があります。
アルゴリズムの概要
- 入力整数を読み取る
- 桁を反転させ、結果を保存
- 反転した数と元の数を比較
- 一致すれば回文数、そうでなければ非回文数
while文を使った判定
以下は、while文を使って数を反転させ、回文数かどうかを判定する簡潔なJavaプログラムです。処理過程を理解しやすいよう中間ステップを出力します。
package com.guru99;
public class PalindromeNum {
public static void main(String[] args) {
int inputNumber = 171; // 判定する数
int reversed = 0;
int temp = inputNumber;
while (temp > 0) {
int lastDigit = temp % 10;
reversed = (reversed * 10) + lastDigit;
temp /= 10;
}
System.out.println("反転した数: " + reversed);
if (reversed == inputNumber) {
System.out.println("回文数です。");
} else {
System.out.println("回文数ではありません。");
}
}
}
実行結果
反転した数: 171 回文数です。
for文を使った判定
同じロジックをfor文で表現することもでき、ループカウンタをデクリメントする形でより自然に書ける場合があります。
package com.guru99;
public class PalindromeNum {
public static void main(String[] args) {
int inputNumber = 185; // 判定する数
int reversed = 0;
int temp = inputNumber;
for (; temp > 0; temp /= 10) {
int lastDigit = temp % 10;
reversed = (reversed * 10) + lastDigit;
}
System.out.println("反転した数: " + reversed);
if (reversed == inputNumber) {
System.out.println("回文数です。");
} else {
System.out.println("回文数ではありません。");
}
}
}
実行結果
反転した数: 581 回文数ではありません。
考慮事項とベストプラクティス
- 負の数: 定義上、負の数は先頭のマイナス記号があるため回文数とは見なされません。入力が負の場合は即座に
falseを返すべきです。 - オーバーフロー: 32ビット整数の反転ではオーバーフローする可能性があります。本番コードでは
longを使用するか、乗算前にオーバーフローチェックを行ってください。 - 文字列アプローチ: 数を文字列に変換し、その反転と比較する方法は、特に大きな数に対してよりシンプルでエラーが少ないです。
詳細については、GeeksforGeeksおよびStack Overflowの数値反転に関する議論を参照してください。
Java
- C# while 文と do-while 文をマスターする:構文、例、ベストプラクティス
- C# for ループをマスターする:構文、フロー、実践例
- C++ forループ完全ガイド:ステップバイステップでマスター
- Pythonループ完全ガイド:for、while、break、continue、enumerate
- Java Hello World:最初のプログラム
- Java拡張forループをマスター:構文、例、ベストプラクティス
- Javaで素数判定を行うプログラム
- Javaで1から100までの素数を列挙するプログラム
- Javaでフィボナッチ数列を生成:for文、while文、再帰の実装例
- Javaでアームストロング数を判定・列挙するプログラム
- Javaで回文数を判定する:while文とfor文を使ったアルゴリズム