C++で数値が回文数かどうかを判定する方法
この記事では、ある数値が回文数(パリンドローム)かどうかを判定する方法を解説します。回文数とは、前から読んでも後ろから読んでも同じになる数値のことです。例えば、12321 は回文数ですが、12345 は回文数ではありません。
判定のロジックは非常にシンプルです。数値を逆順に並べ替え、元の数値と一致するかどうかを比較します。一致すれば回文数、一致しなければ回文数ではありません。より理解を深めるために、アルゴリズムを見ていきましょう。
アルゴリズム
isPalindrome(n) −
入力 − 数値 n
出力 − 数値が回文数であれば true、そうでなければ false
begin
temp := n
rev := 0
while n > 0, do
rev := rev * 10 + (n mod 10)
n := n / 10
done
if rev = temp, then
return true
return false
end処理の流れ
このアルゴリズムでは、まず元の数値を temp 変数に保存しておきます。次に、数値の最下位の桁を1桁ずつ取り出し、rev 変数に逆順に組み立てていきます。ループが終わった時点で rev には元の数値を反転させた値が入っているので、temp と比較することで回文数かどうかを判定できます。
サンプルコード
#include <iostream>
using namespace std;
bool isPalindrome(int number) {
int temp = number;
int rev = 0;
while (number > 0) {
rev = 10 * rev + number % 10; // 最後の桁を取り出して rev に連結する
number /= 10;
}
if (rev == temp)
return true;
return false;
}
int main() {
int n = 12321;
if (isPalindrome(n)) {
cout << n << " is palindrome number";
} else {
cout << n << " is not a palindrome number";
}
}実行結果
12321 is palindrome number
補足:文字列を使った別のアプローチ
数値を文字列に変換して、前後から文字を比較していく方法でも回文判定は可能です。ただし、数値の桁を直接操作する上記の方法の方が、余分なメモリを使わずに済むため効率的です。また、負の数は符号の関係で回文数とはみなされない点にも注意しましょう。
-
数値が回文数(パリンドローム)かどうかを判定するC++プログラム
回文数(パリンドローム)とは、桁の並びを逆に読んでも元の値と変わらない数のことです。その対称的な性質から「対称数」と呼ばれることもあります。例えば、12321、1551、11 などの数は、桁を逆順に並べ替えても値が変化しないため、回文数です。本記事では、与えられた数値が回文数であるかどうかを判定するC++プログラムを紹介し、その仕組みを詳しく解説します。プログラム例#include<iostream> using namespace std; void palindrome(int num) { int rev=0,val; val = num; while
-
【Java入門】数値が回文(パリンドローム)かどうかを判定するプログラムの作り方
この記事では、Javaを使って「与えられた数値が回文数(パリンドローム数)であるかどうか」を判定する方法を解説します。 回文(パリンドローム)とは? 回文とは、前から読んでも後ろから読んでも同じになる単語・数字・文章などの文字列のことです。例えば、「しんぶんし」や「たけやぶやけた」といった言葉、あるいは 10101 のような数字は回文です。 文字列が回文かどうかを判定するには、その文字列を逆順に並べ替えた結果が元の文字列と一致するかを確認します。具体的には、1番目と最後の要素、2番目と後ろから2番目の要素…というように、対応する位置の要素同士がすべて等しいかどうかを調べればよいのです。 入出力