一、问题描述
判断回文数
问题的描述
如下几点所示
- “回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。
- 在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。
- 设n是一任意自然数,若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。
- 例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。
- 回文数就是顺着看和倒着看相同的数。
- 判定正整数n 的 d 进制表示 形式是否是回文数。
注意:
- 偶数个的数字也有回文数124421
- 小数没有回文数
其中,本文要使用的回文数如下功能所示。
- 回文数就是顺着看和倒着看相同的数。
- 判定正整数n 的 d 进制表示 形式是否是回文数。
二、算法实例编译环境
本文C语言经典算法实例的编译环境,使用的是集成开发环境:Visual Studio 2019
Visual Studio 2019官网链接如下
Visual Studio 2019官网链接
Visual Studio 2019集成的开发环境的特点有
-
- Visual Studio 2019默认安装Live Share代码协作服务。
-
- 帮助用户快速编写代码的新欢迎窗口、改进搜索功能、总体性能改进。
-
- Visual Studio IntelliCode AI帮助。
-
- 更好的Python虚拟和Conda支持。
-
- 以及对包括WinForms和WPF在内的.NET Core 3.0项目支持等。
三、算法实例实现过程
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。
- 定义输入进制变量的数组scale。
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是十进制。
- 如果数字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是十进制。
- 如果数字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.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;
}
五、总结
本文的C语言经典算法实例:求二维数组最大最小值,要实现的目标如下
- 回文数就是顺着看和倒着看相同的数。
- 判定正整数n 的 d 进制表示 形式是否是回文数。
文章来源:https://www.toymoban.com/news/detail-781536.html
文到这里就结束啦。
希望本文的C语言经典算法实例4:判断回文数。
能激发你对C语言以及算法学习的热爱。文章来源地址https://www.toymoban.com/news/detail-781536.html
- 你们的支持是对我最大的鼓励。
到了这里,关于C语言经典算法实例4:判断回文数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!