【C言語】入力された数値が回文かどうかを判定するプログラム
回文(パリンドローム)とは、前から読んでも後ろから読んでも同じになる単語・数字・文章などの文字列のことを指します。例えば「121」や「madam」などが代表的な例です。
本記事では、コンソールから数値を入力し、それが回文数であるかどうかを判定するC言語プログラムを紹介します。
回文判定の基本的な考え方
判定の手順は以下の通りです。
- コンソールから数値を入力します。
- 入力された数値を比較用の temp変数 に保存しておきます。
- 数値が0より大きい間、下記のロジックで桁を反転させた値を作成します。
while(n>0){
r=n%10;
sum=(sum*10)+r;
n=n/10;
}このロジックでは、剰余演算(%)で1の位の数字を取り出し、除算(/)で桁を一つずつ減らしながら、反転した数値をsumに組み立てていきます。
処理が完了した後、元の数値を保存しておいた temp と sum を比較します。temp == sum であれば入力値は回文数、そうでなければ回文数ではないと判断できます。
サンプルプログラム
以下は、入力された値が回文数かどうかを検証するCプログラムの完全なコードです。
#include<stdio.h>
#include<conio.h>
void main(){
int n, r, sum=0, temp;
printf("Enter a number: ");
scanf("%d",&n);
temp=n; /* 元の値を保存 */
while(n>0){
r=n%10; /* 最下位の桁を取得 */
sum=(sum*10)+r; /* 反転した数値を構築 */
n=n/10; /* 桁を一つ削る */
}
if(temp==sum)
printf("It is a palindrome number!");
else
printf("It is not a palindrome number!");
getch();
}実行結果
上記のプログラムをコンパイルして実行すると、以下のような出力が得られます。
Enter a number: 12345 It is not a palindrome number!
この例では「12345」を逆から読むと「54321」となり、元の数値と一致しないため、回文数ではないと判定されます。一方、「12321」のような数値を入力すれば、反転しても同じ値になるため「It is a palindrome number!」と表示されます。
ポイントまとめ
- 回文判定には「数値を反転させる」処理が鍵となります。
- 反転には %(剰余)と /(除算)を組み合わせたwhileループを使用します。
- 比較前に元の値を別の変数に退避させておくことが重要です。
-
【C言語】再帰を使って配列が回文かどうかを判定するプログラム
配列 arr[n](n は配列のサイズ)が与えられたとき、再帰を用いてその配列が回文かどうかを判定するのが本記事のテーマです。回文とは、前から読んでも後ろから読んでも同じになる並びのことで、「MADAM」や「NAMAN」などが代表的な例です。配列が回文かどうかを調べるには、先頭と末尾から順に要素を比較していきます。再帰的なアプローチでも同様に、start と end の値を更新しながら比較を続けます。start と end が交差(すれ違う)すれば回文と判定でき、途中で要素が一致しなかった場合はそこで処理を打ち切り、false を返します。入力例と出力例入力: arr[] = { 2, 3,
-
C++のSTLを使って配列が回文かどうかを判定するプログラム
整数 n 個からなる配列 arr[n] が与えられたとき、「その配列は回文(パリンドローム)か?」を判定するのが本稿のテーマです。C++ の STL(標準テンプレートライブラリ)を活用して、この問題をシンプルに解いていきます。 STLとは STL(Standard Template Library)は、C++ に用意されたテンプレートクラスの集合体で、スタック・キュー・リストといったデータ構造や、ソート・反転などの便利な関数を提供します。これらを活用するには、テンプレートクラスに関する基本的な知識が必要です。本稿では、STL の reverse() 関数を使って配列を反転させています。 回文と