什么是回文数呢? 例如: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;
if(n > x || n == 0)
return false;
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
其他的数自行分析
|