什么是回文数呢?
例如:11、22、121、12321、258852
等等,但还有个条件回文数非负
,并且一位数
都是回文数
代码如下
#include<stdio.h>
#include<stdbool.h>
bool isft(int x)
{
int n = 0;
if(x < 0)
return false;
if(x<10)
return true;
while(1)
{
n = n*10 + x%10;
x /= 10;
//如果倒序数已经大于此时x,表示不是回文数
//判断x的个位是否为0,若为0,则不是回文数
if(n > x || n == 0)
return false;
//如果x的位数为奇数位多除一次10
if(x/10 == n || x == n)
return true;
}
}
int main()
{
int n;
printf("plase input a number:");
scanf("%d",&n);
printf("%d",isft(n));
return 0;
}
代码分析
上述代码用的是翻转x的后一半与前一半对比,如果相等则为回文数,反之不是。
假如有一个数:12321
,结合上面代码
由于12321大于10,所以直接进到while死循环
第一次n = n*10 + x%10
得到n=1,x=1232,判断n是否大于x,或者x的个位数是否为0
若成立返回false
,反之继续往下
接着判断x是否等于n(当x的位数为偶数时
)或者x/10是否等于n(当x的位数为奇数时),若成立,
结束循环,反之继续执行while
第二次得到n=12,x=123,此时满足
if(x/10 == n || x == n)
,
所以结束函数,并返回true
其他的数自行分析