力扣9题,回文数详解(含头文件)

9. 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

  • 例如,121 是回文,而 123 不是。

示例 1:

输入:x = 121
输出:true

示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
  • -231 <= x <= 231 - 1(此处X的取值范围为2的31次方,为长整数)

解题思路:

1.首先考虑整数X的范围根据提示把X定义为长整数(long int )

2.输入X,因为X为长整型,所以为   scanf("%ld", &number);

3.这是最重要的一个环节了,bool flag = huiwenshu(number);

咱们先说bool flag =后面的一坨,flag可以理解为bool下面的一个变量,

而后面的一坨在进行运算之后会返回一个值本题返回的只有0或1.

4.在主函数的最后用两个If判定是否是回文数,是返回ture,不是返回false.

5.而最最重要的这一坨,bool huiwenshu(long int x)我们现在来分析,

首先,我们在头文件里面要记得加上#include<stdbool.h>,这样才能调用bool函数

第二,我们来看这个函数内部,

long int s,y=0;先定义一个S用来接收输入的X,为什么要用S这个变量来接受一下呢?

因为这这个函数中X是一个已有的值,把X的值赋给S,然后对S进行一通折腾也不会影响到X本身,所以这一步是很有必要的。

y呢,是用来把这个数字逆转过来,就是把最后一个数字放在第一个,然会就这么着全部来一遍,但是在使用前都给它赋值为0,

第三,前期工作准备好之后,我们开始上重头戏了,

while(s>0)循环条件是s>0,当s=0时即可跳出循环,

y=y*10+s%10;这个如果第一次看的话可能有点不好理解,咱们拆开看,

s%10是对s取余数,y*10可以理解为把个位上的数升成十位,

所以当开始y=0,先进行s%10这一步,然后y*10+s%10,s=s/10相当于把这个好多位的数每次去掉一位从个位开始,

除10嘛,个位就砍掉了;循环往复;跳出循环之后和原来的X对比,相等的话就是回文数返回ture,不等就不是返回false,

但是bool函数会把ture和false分别转换成1和0,所以需要在主函数里再加上 这个东东(下面这一坨)。

if(flag==0)
                printf("false\n");
        if(flag==1)
                printf("ture\n");

 解题代码如下:

#include<stdio.h>
#include<stdbool.h>
bool huiwenshu(long int x) //回文数判断函数      /*bool函数在使用前要先声明*/
{
        long int s,y=0;
        s=x;
                while(s>0)
                       {
                                y=y*10+s%10;
                                s=s/10;
                        }
        if(y==x)
                return true; //是回文数则返回1
        else
                return false; //不是回文数则返回0
}
        int main() {
                long int number;
                scanf("%ld", &number);

                bool flag = huiwenshu(number);
        if(flag==0)
                printf("false\n");
        if(flag==1)
                printf("ture\n");

}

 第一次写博客,有啥问题评论区里多多指教,快一点了,吃饭去

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值