追梦者你好,再次文章你会学到最神奇且最普通的数“回文数”
1.什么是回文数?
神奇的回文数到底是什么鬼样?其实很简单,比如“12321”就是回文数,你发现什么规律了吗?
对!中间对称,也就是把“12321” 从后往前倒序后又等于本身“12321”,回文数必须大于等于0的数。你知道了吗!
2.怎么用C语言来判断一个数是否为回文数?
第一步:接受待测数子并判断正负溢出,溢出返回 0 ,没有溢出备份下来并继续下一步
第二步:计算待测数字的位数(倒序是要用到)
第三步:把待测数字倒序,判断书否溢出,溢出返回 0 ,没有溢出存储下来并继续下一步
第四步:比较 待测数字 和 倒序后的数字 是否一样,一样说明是回文数,判断回文数函数返回 1
否则 不是回文数 返回 0
3.废话不多说,上代码
//力扣刷题网上的题 “回文数”解法
//回文数的特点 1.大于等于0 2.把每一位倒序后还是同一个人数 比如"12321" "1" "666" "565"...
#include <stdio.h>
#include <math.h>// pow()函数头
#include <stdlib.h>
//这个函数直接拷贝到力扣网可以通关
int isPalindrome(int x);//判断回文数 是 返回 1 否 返回 0
int main(int argc,char * argv[])//主函数 程序入口
{
int i,x[]={123,121,12321,156,565,9999,665,15951,0,1,11,-1,-121}; //测试数组
//循环判断测试数据
for(i=0;i<sizeof(x)/sizeof(x[0]);i++)
{
if(1==isPalindrome(x[i]))
{
printf("数<%d>是回文数\n",x[i]);//是回文数
}
else
{
printf("数<%d>不是回文数\n",x[i]);//不是回文数
}
}
return 0;
}
//判断是否为回文数
int isPalindrome(int x){
long long temp , tempss;//临时存储变量
char numsize=0 , i; //存储待测数字
if(x<0)//待测数字小于0 返回0
{
return 0;
}
if(x>pow(2,31)-1)//判断正溢出
return 0;
tempss = temp=x;//备份变量
while(temp)//计算待测数字的位数
{
temp/=10;
numsize++;//待测数字的位数
}
for(i=0;i<numsize;i++)//按尾数倒序数字
{
temp=temp + (tempss%10)*pow(10,numsize-1-i);//
tempss/=10;
}
if(temp>2147483647)//判断转换后的正溢出
return 0;
if(temp==x)//判断原待测数字和倒序后的数字是否相同
return 1;//是(是回文数) 返回 1
else
return 0;//否则返回 0
}