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

【C言語】入力された数値が回文かどうかを判定するプログラム

回文(パリンドローム)とは、前から読んでも後ろから読んでも同じになる単語・数字・文章などの文字列のことを指します。例えば「121」や「madam」などが代表的な例です。

本記事では、コンソールから数値を入力し、それが回文数であるかどうかを判定するC言語プログラムを紹介します。

回文判定の基本的な考え方

判定の手順は以下の通りです。

  1. コンソールから数値を入力します。
  2. 入力された数値を比較用の temp変数 に保存しておきます。
  3. 数値が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ループを使用します。
  • 比較前に元の値を別の変数に退避させておくことが重要です。
  1. 【C言語】再帰を使って配列が回文かどうかを判定するプログラム

    配列 arr[n](n は配列のサイズ)が与えられたとき、再帰を用いてその配列が回文かどうかを判定するのが本記事のテーマです。回文とは、前から読んでも後ろから読んでも同じになる並びのことで、「MADAM」や「NAMAN」などが代表的な例です。配列が回文かどうかを調べるには、先頭と末尾から順に要素を比較していきます。再帰的なアプローチでも同様に、start と end の値を更新しながら比較を続けます。start と end が交差(すれ違う)すれば回文と判定でき、途中で要素が一致しなかった場合はそこで処理を打ち切り、false を返します。入力例と出力例入力: arr[] = { 2, 3,

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

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