C言語古典アルゴリズム例4:回文数の判定
1. 問題の説明
回文数の判定
問題の説明は
以下の点に示されています
- 「回文」とは、前後に読める文章のことで、「私は万人のため、万人は私のため」など、古代から現代まで中国国内外に存在する修辞法や言葉遊びであり、すぐ。
- 数学では、回文数と呼ばれる、そのような特徴を持つ数のクラスもあります。
- n を任意の自然数とすると、n の桁を逆に並べた自然数 n1 が n と等しいとき、n は回文数と呼ばれます。
- たとえば、n=1234321 の場合、n は回文数と呼ばれますが、n=1234567 の場合、n は回文数ではありません。
- 回文数とは、前方と後方を見ても同じ数です。
- 正の整数 n の d 基数表現が回文かどうかを判断します。
知らせ:
- 偶数にも回文数がある 124421
- 回文数のない小数
このうち、この記事で使用する回文の数は、次の関数で示されます。
- 回文数とは、前方と後方を見ても同じ数です。
- 正の整数 n の d 基数表現が回文かどうかを判断します。
2. アルゴリズム例コンパイル環境
この記事の C 言語のクラシック アルゴリズムの例のコンパイル環境では、統合開発環境: Visual Studio 2019 を使用します。
Visual Studio 2019の公式サイトへのリンクは以下の通り
Visual Studio 2019 公式 Web サイトのリンク
Visual Studio 2019 統合開発環境の特長は、
-
- Visual Studio 2019 は、既定で Live Share コード コラボレーション サービスをインストールします。
-
- ユーザーがコードをすばやく記述できるようにする新しいウェルカム ウィンドウ、改善された検索機能、一般的なパフォーマンスの改善。
-
- Visual Studio IntelliCode AI ヘルプ。
-
- より優れた Python 仮想化と Conda サポート。
-
- また、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 言語とアルゴリズムの学習への愛を刺激することができます。
- あなたのサポートは私の最大の励ましです。