0
点赞
收藏
分享

微信扫一扫

C语言经典算法实例4:判断回文数

C语言经典算法实例4:判断回文数

在这里插入图片描述

一、问题描述

  1. “回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。
  2. 在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。
  3. 设n是一任意自然数,若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。
  4. 例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。
  5. 回文数就是顺着看和倒着看相同的数。
  6. 判定正整数n 的 d 进制表示 形式是否是回文数。
  1. 偶数个的数字也有回文数124421
  2. 小数没有回文数
  • 回文数就是顺着看和倒着看相同的数。
  • 判定正整数n 的 d 进制表示 形式是否是回文数。

二、算法实例编译环境

Visual Studio 2019官网链接如下

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.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");
  • 遍历数组中的数字, 进行是否是回文数的判断。
  • 对数组中的数字是否是回文数进行输出。

在这里插入图片描述

四、经典算法实例程序 完整代码

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;
}

在这里插入图片描述

五、总结

  • 回文数就是顺着看和倒着看相同的数。
  • 判定正整数n 的 d 进制表示 形式是否是回文数。

在这里插入图片描述

  • 你们的支持是对我最大的鼓励。
举报

相关推荐

0 条评论