C语言:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

程序分析:此题要求判断一个五位数是不是回文数,首先要理解回文数的定义,然后我们就要思考如何处理我们输入的五位数。

方法一:最简单的思路,根据回文数的定义,我们就把这个五位数分解,求出它的万位,千位,百位,十位,个位。然后我们只需要比较,看分解出的万位与个位,千位与十位是否相等,若相等则为回文数。代码如下:

#include <stdio.h>

int main()
{
    long a, b, c, d, x;
    printf("请输入 5 位数字:");
    scanf("%ld", &x);
    a = x / 10000;        //分解出万位
    b = x % 10000 / 1000;  //分解出千位
    c = x % 100 / 10;       //分解出十位
    d = x % 10;            //分解出个位
	//判断个位等于万位并且十位等于千位
    if (a == d && b == c) { 
        printf("这是回文数\n");
    }
    else {
        printf("这不是回文数\n");
    }
}

程序运行结果如下:12321是回文数,12345不是回文数。
在这里插入图片描述
在这里插入图片描述
方法二:第二种思路就是我们利用字符串,将这5位数作为字符串输入到一个字符数组中,利用数组下标找到各个数字进行比较,判断是否为回文数字。代码如下:

#include <stdio.h>
#include<string.h>

int main()
{
    char str[5];
    printf("请输入五位数:");
    scanf("%s", str);

    if (str[0] == str[4] && str[1] == str[3])
        printf("这是一个回文数。\n");
    else
        printf("这不是回文数。\n");
    return 0;
}

程序运行,同样可以得到方法一的结果。

方法三:提供最后一种思路,就是将这一串数逆序排列,将得到的逆序排列数与原数进行比较,判断是否为回文数字。代码如下:

#include <stdio.h>

int main()
{
    int x;
    int sum = 0;
    printf("请输入一个整数:\n");
    scanf("%d", &x);

    for (int i = x; i > 0; i /= 10)
        //sum最终为逆序后各个位相加的结果
        sum = sum * 10 + i % 10;
    //若该数是回文数字,说明该数逆序后还是这个数本身
    // 所以这里直接判断sum与原数是否相等
    if (sum == x)
        printf("%d 是回文数\n", x);
    else
        printf("%d 不是回文数\n", x);
}

同样运行程序,我们可以得到想要的结果,但这个思路不好想,主要是前面两个方法,是最清晰,最应该想到的思路。

  • 14
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值