C++
 Computer >> コンピューター >  >> プログラミング >> C++

数値が回文数(パリンドローム)かどうかを判定するC++プログラム

回文数(パリンドローム)とは、桁の並びを逆に読んでも元の値と変わらない数のことです。その対称的な性質から「対称数」と呼ばれることもあります。例えば、12321、1551、11 などの数は、桁を逆順に並べ替えても値が変化しないため、回文数です。

本記事では、与えられた数値が回文数であるかどうかを判定するC++プログラムを紹介し、その仕組みを詳しく解説します。

プログラム例

#include<iostream>
using namespace std;
void palindrome(int num) {
    int rev=0,val;
    val = num;
    while(num > 0) {
        rev = rev * 10 + num % 10;
        num = num / 10;
    }
    if(val==rev)
    cout<<val<<" is a palindrome"<<endl;
    else
    cout<<val<<" is not a palindrome"<<endl;
}
int main() {
    palindrome(12321);
    palindrome(1234);
    return 0;
}

実行結果

12321 is a palindrome
1234 is not a palindrome

プログラムの仕組み

上記のプログラムでは、関数 palindrome() が数値が回文数かどうかを判定します。この関数は引数として num を1つ受け取ります。処理を行う前に、num のコピーが val に保存されます。これは後の比較処理において重要なポイントとなります。続いて、num の桁を逆順に並べた値が rev に格納されます。

この逆順処理は、以下のコード部分で実現されています。

int rev=0,val;
val = num;
while(num > 0) {
    rev = rev * 10 + num % 10;
    num = num / 10;
}

桁を逆順にするアルゴリズム

while ループの中では、まず「num % 10」によって num の最下位の桁(一の位)を取り出します。そして「rev * 10 + 取り出した桁」という計算により、その桁を rev の末尾へ追加していきます。その後、「num / 10」で num の最下位の桁を削除します。この操作を num が0になるまで繰り返すことで、num のすべての桁が逆転した値が rev に完成します。

回文数かどうかの判定

桁の逆転が完了したら、rev の値を val と比較します。ここで num ではなく val と比較する点が重要です。これは、ループ処理の間に num の値がすでに0になってしまっているためです。もし rev と val が一致すれば、その数は桁を逆にしても値が変わらない、すなわち回文数であることが分かります。一致しない場合は回文数ではないと判定されます。

この判定処理は、次のコード部分で行われています。

if(val==rev)
cout<<val<<" is a palindrome"<<endl;
else
cout<<val<<" is not a palindrome"<<endl;
  1. C++で部分文字列[L…R]が回文かどうかを判定するクエリ処理プログラム

    この記事では、文字列 str と、それぞれ2つの値 L と R から構成される Q 個のクエリが与えられたとき、各クエリに対して部分文字列 [L…R] が回文(前から読んでも後ろから読んでも同じ文字列)であるかどうかを判定するプログラムを C++ で作成する方法を解説します。問題の概要各クエリを処理する際には、指定された範囲 L から R までで切り出した部分文字列が回文であるかどうかを確認する必要があります。具体例で問題を理解しよう入力str = abccbeba , Q = 3 Query[][] = {{1, 4}, {0, 6}, {4, 6}}出力Palindrome Not Pal

  2. C++のSTLを使って配列が回文かどうかを判定するプログラム

    整数 n 個からなる配列 arr[n] が与えられたとき、「その配列は回文(パリンドローム)か?」を判定するのが本稿のテーマです。C++ の STL(標準テンプレートライブラリ)を活用して、この問題をシンプルに解いていきます。 STLとは STL(Standard Template Library)は、C++ に用意されたテンプレートクラスの集合体で、スタック・キュー・リストといったデータ構造や、ソート・反転などの便利な関数を提供します。これらを活用するには、テンプレートクラスに関する基本的な知識が必要です。本稿では、STL の reverse() 関数を使って配列を反転させています。 回文と