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

リスト内の回文数をすべて見つける方法

ここでは、シンプルな問題を取り上げます。与えられたリスト(配列)の中から、回文数(上から読んでも下から読んでも同じになる数)をすべて見つけ出す方法を解説します。

アプローチは非常に簡単です。リストから各数値を順番に取り出し、その数が回文であるかどうかを判定します。回文であれば、その数を出力するだけです。

アルゴリズム

getAllPalindrome(arr, n)

Begin
    for each element e in arr, do
        if e is palindrome, then
            print e
        end if
    done
End

このアルゴリズムでは、配列 arr の各要素に対して回文判定を行い、回文である要素のみを出力します。

回文判定の仕組み

数値が回文かどうかを判定するには、数値を桁ごとに逆順に並べ替えた「反転数」を作り、元の数値と比較します。両者が一致すれば、その数は回文です。例えば 121 を反転しても 121 になるため回文ですが、145 を反転すると 541 となり一致しないため回文ではありません。

サンプルコード(C++)

#include <iostream>
#include <cmath>
using namespace std;
bool isPalindrome(int n){
    int reverse = 0, t;
    t = n;
    while (t != 0){
        reverse = reverse * 10;
        reverse = reverse + t%10;
        t = t/10;
    }
    return (n == reverse);
}
int getAllPalindrome(int arr[], int n) {
    for(int i = 0; i<n; i++){
        if(isPalindrome(arr[i])){
            cout << arr[i] << " ";
        }
    }
}
int main() {
    int arr[] = {25, 145, 85, 121, 632, 111, 858, 45};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "All palindromes: ";
    getAllPalindrome(arr, n);
}

コードの解説

  • isPalindrome(int n):受け取った整数を1桁ずつ取り出して反転数を生成し、元の数値と比較した結果を返します。
  • getAllPalindrome(int arr[], int n):配列の全要素をループで走査し、回文である要素だけを出力します。
  • main():サンプルデータ {25, 145, 85, 121, 632, 111, 858, 45} を使って関数を呼び出します。

実行結果

All palindromes: 121 111 858

この例では、121・111・858 の3つの数が回文数として検出されました。これらは左右どちらから読んでも同じ数字の並びになっているためです。

  1. C言語でアームストロング数を判定するプログラムの作成方法

    アームストロング数とは? 本記事では、入力された整数 n がアームストロング数(Armstrong number)であるかどうかを判定するCプログラムについて解説します。 アームストロング数とは、各桁の数字をそれぞれ「桁数(位数)」でべき乗し、その総和が元の数値と等しくなる数のことです。例えば、4桁の数 1634 は 14 + 64 + 34 + 44 = 1 + 1296 + 81 + 256 = 1634 となるため、アームストロング数です。 アームストロング数を求める基本的な考え方は、次の式のように表せます。 計算式: wxyz…. = pow(w, n) + pow(x, n) + p

  2. 【C++】配列内のすべての素数の積を求める方法

    整数型配列 arr[] が与えられたとき、その配列に含まれるすべての素数を見つけ出し、それらの積を計算するのが本記事のテーマです。素数とは、1とその数自身でしか割り切れない正の整数のことです。たとえば、2、3、5、7、11などが素数に該当します。それでは、次の配列を例に解を求めてみましょう。入力: arr[] = { 11, 20, 31, 4, 5, 6, 70 }出力: 1705説明: 配列内の素数は 11、31、5 の3つであり、その積は 11 × 31 × 5 = 1705 となります。入力: arr[] = { 1, 2, 3, 4, 5, 6, 7 }出力: 210説明: 配列内の