C言語古典アルゴリズム例4:回文数の判定

ここに画像の説明を挿入

1. 問題の説明

回文数の判定
問題の説明は
以下の点に示されています

  1. 「回文」とは、前後に読める文章のことで、「私は万人のため、万人は私のため」など、古代から現代まで中国国内外に存在する修辞法や言葉遊びであり、すぐ。
  2. 数学では、回文数と呼ばれる、そのような特徴を持つ数のクラスもあります。
  3. n を任意の自然数とすると、n の桁を逆に並べた自然数 n1 が n と等しいとき、n は回文数と呼ばれます。
  4. たとえば、n=1234321 の場合、n は回文数と呼ばれますが、n=1234567 の場合、n は回文数ではありません。
  5. 回文数とは、前方と後方を見ても同じ数です。
  6. 正の整数 n の d 基数表現が回文かどうかを判断します。

知らせ:

  1. 偶数にも回文数がある 124421
  2. 回文数のない小数

このうち、この記事で使用する回文の数は、次の関数で示されます。

  • 回文数とは、前方と後方を見ても同じ数です。
  • 正の整数 n の d 基数表現が回文かどうかを判断します。

2. アルゴリズム例コンパイル環境

この記事の C 言語のクラシック アルゴリズムの例のコンパイル環境では、統合開発環境: Visual Studio 2019 を使用します。
ここに画像の説明を挿入

Visual Studio 2019の公式サイトへのリンクは以下の通り

Visual Studio 2019 公式 Web サイトのリンク
ここに画像の説明を挿入

Visual Studio 2019 統合開発環境の特長は、

    1. Visual Studio 2019 は、既定で Live Share コード コラボレーション サービスをインストールします。
    1. ユーザーがコードをすばやく記述できるようにする新しいウェルカム ウィンドウ、改善された検索機能、一般的なパフォーマンスの改善。
    1. Visual Studio IntelliCode AI ヘルプ。
    1. より優れた Python 仮想化と Conda サポート。
    1. また、WinForms や WPF などを含む .NET Core 3.0 プロジェクトのサポート。

3. アルゴリズム例の実装プロセス

3.1、ヘッダーファイルを含む

次のようにヘッダー ファイル コードをインクルードします。

#pragma once

// 包含头文件
#include <stdio.h>
#include <stdlib.h>

  • 使用する C 言語ヘッダー ファイルをインクルードします。

3.2. 配列を宣言して初期化する

次のように配列を宣言し、コードを初期化します。

int num[] = {
    
     232,27,851, 12321};			// 定义输入数字变量的数组。
int scale[] = {
    
     2,10,16 };					// 定义输入进制变量的数组。
  • 入力数値変数の配列 num を定義します。
  • 入力ベース変数の配列スケールを定義します。

3.3. 関連する変数を宣言する

関連する変数を宣言するコードは次のとおりです。

	int i, j;           // 声明相关的变量
  • 関連する変数 i、j を宣言します。

3.4. 関数の宣言

宣言関数コードは次のとおりです。

/// <summary>
/// 判断数字n是否是输入d进制的回文数
/// </summary>
/// <param name="n">数字n</param>
/// <param name="d">d代表进制, 若d = 10 , 则数字n是十进制</param>
/// <returns>如果数字n是d进制的回文数, 则返回1</returns>
int circle(int n, int d);

  • 数 n が基数 d に入力された回文数であるかどうかを判断できます。
  • d は基数を表し、d = 10 の場合、数値 n は 10 進数です。
  • 数値 n が基数 d の回文数である場合、1 を返します。

ここに画像の説明を挿入

3.5. 関数定義

関数の定義コードは次のとおりです。

/// <summary>
/// 判断数字n是否是输入d进制的回文数
/// </summary>
/// <param name="n">数字n</param>
/// <param name="d">d代表进制, 若d = 10 , 则数字n是十进制</param>
/// <returns>如果数字n是d进制的回文数, 则返回1</returns>
int circle(int n, int d)
{
    
    
    int s = 0, m = n;

    while (m)
    {
    
    
        s = s * d + m % d;
        m /= d;
    }

    return s == n;
}
  • 関数の宣言を定義して、関数の特定の機能を実現します。
  • 数 n が基数 d に入力された回文数であるかどうかを判断します。
  • d は基数を表し、d = 10 の場合、数値 n は 10 進数です。
  • 数値 n が基数 d の回文数である場合、1 を返します。

3.6. 配列内の数値をトラバースして回文数かどうかを判断する

配列内の数値をたどり、回文数かどうかを判断するコードは次のとおりです。

	/// <summary>
    /// 遍历数组中的数字, 进行是否是回文数的判断
    /// </summary>
    /// <returns>无</returns>
    for (i = 0; i < sizeof(num) / sizeof(num[0]); i++)
    {
    
    
        for (j = 0; j < sizeof(scale) / sizeof(scale[0]); j++)
        {
    
    
            if (circle(num[i], scale[j]))       // 调用circle函数, 对数组中的存储的数字进行回文数的判断。
            {
    
    
                printf("%d --> (%d) 进制是回文数\n", num[i], scale[j]);
            }
            else
            {
    
    
                printf("%d --> (%d) 进制不是回文数\n", num[i], scale[j]);
            }
        }
        printf("\n");
    }
    printf("\n");
  • 配列内の数字をトラバースして、それらが回文数であるかどうかを判断します。
  • 配列内の数値が回文数かどうかを出力します。

F5 を押してコンパイルすると、デバッグ結果は次のようになります。

ここに画像の説明を挿入

4. 古典的なアルゴリズムのサンプル プログラムの完全なコード

古典的なアルゴリズムのサンプル プログラムの完全なコードは次のとおりです。

4.1、main.h ファイル

#pragma once

// 包含头文件
#include <stdio.h>
#include <stdlib.h>

int num[] = {
    
     232,27,851, 12321};			// 定义输入数字变量的数组。
int scale[] = {
    
     2,10,16 };					// 定义输入进制变量的数组。

/// <summary>
/// 判断数字n是否是输入d进制的回文数
/// </summary>
/// <param name="n">数字n</param>
/// <param name="d">d代表进制, 若d = 10 , 则数字n是十进制</param>
/// <returns>如果数字n是d进制的回文数, 则返回1</returns>
int circle(int n, int d);

ここに画像の説明を挿入

4.2、main.c ファイル

#define _CRT_SECURE_NO_WARNINGS

#include "Main.h"


/// <summary>
/// 主函数
/// </summary>
/// <returns>返回0</returns>
int main()
{
    
    
    system("color 3E");

    
    int i, j;           // 声明相关的变量

    /// <summary>
    /// 遍历数组中的数字, 进行是否是回文数的判断
    /// </summary>
    /// <returns>无</returns>
    for (i = 0; i < sizeof(num) / sizeof(num[0]); i++)
    {
    
    
        for (j = 0; j < sizeof(scale) / sizeof(scale[0]); j++)
        {
    
    
            if (circle(num[i], scale[j]))       // 调用circle函数, 对数组中的存储的数字进行回文数的判断。
            {
    
    
                printf("%d --> (%d) 进制是回文数\n", num[i], scale[j]);
            }
            else
            {
    
    
                printf("%d --> (%d) 进制不是回文数\n", num[i], scale[j]);
            }
        }
        printf("\n");
    }
    printf("\n");

    system("pause");
    return 0;
}

/// <summary>
/// 判断数字n是否是输入d进制的回文数
/// </summary>
/// <param name="n">数字n</param>
/// <param name="d">d代表进制, 若d = 10 , 则数字n是十进制</param>
/// <returns>如果数字n是d进制的回文数, 则返回1</returns>
int circle(int n, int d)
{
    
    
    int s = 0, m = n;

    while (m)
    {
    
    
        s = s * d + m % d;
        m /= d;
    }

    return s == n;
}

ここに画像の説明を挿入

V. まとめ

この記事の C 言語の古典的なアルゴリズムの例: 2 次元配列の最大値と最小値を見つける、達成すべき目標は次のとおりです。

  • 回文数とは、前方と後方を見ても同じ数です。
  • 正の整数 n の d 基数表現が回文かどうかを判断します。

ここに画像の説明を挿入

記事はここまでです。
この記事では、C 言語の古典的なアルゴリズムの例 4: 回文数を判断することを願っています。
C 言語とアルゴリズムの学習への愛を刺激することができます。

  • あなたのサポートは私の最大の励ましです。

おすすめ

転載: blog.csdn.net/m0_47419053/article/details/126764924
おすすめ