赞
踩
给你一个整数 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");
}
第一次写博客,有啥问题评论区里多多指教,快一点了,吃饭去
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。