回文数是将自然数n的各位数字反向排列得到自然数n1,若n1与n相等,则称为回文数,例如12321
//从键盘输入一个正整数(位数小于或等于10),判断其是否是回文数
//回文数是将自然数n的各位数字反向排列得到自然数n1,若n1与n相等,则称为回文数,例如12321
#include<stdio.h>
#include<math.h>
int getLength(long int num) //定义函数getLength,计算正整数num的位数
{
int found, length;
found = 0;
length = 10; //设定正整数num的位数小于或等于10
if(num == 0) return 1;
while(found == 0)
{
if(num/(int)pow(10,length-1)>0) found=1;
//库函数pow(10,length-1)的功能是计算10的(length-1)次幂
else length-=1;
}
return(length);
}
int isHuiHanShu(long int num) //定义函数isHuiHanShu,判断正整数num是否是回文数
{
long int n; //定义变量n,保存从键盘输入的正整数
int left; //定义变量left,保存正整数最左边的数字
int right; //定义变量right,保存正整数最右边的数字
int i; //定义变量i,保存正整数的位数
int flag;
//定义变量flag,保存是否是回文数的标志。若不是回文数,则flag=1;否则flag=0
i = getLength(num); //调用函数getLength,将正整数num的位数赋予变量i
n = num;
flag = 0;
while(i>1&&flag==0)
{
left = n/(int)pow(10,i-1); //将正整数n当前最左边的数字赋予变量left
right = n%10; //将正整数n当前最右边的数字赋予变量right
n = n%(int)pow(10,i-1)/10;
i-=2;
if(left != right) flag = 1;
//若正整数n当前最左边和最右边的数字不相等,则是回文数,即标志变量flag赋值1
}
if(flag == 0) return 1; //若是回文数,则返回1
else return 0; //若不是回文数,则返回0
}
int main(void) //主函数
{
long int num;
scanf("%d",&num); //从键盘输入一个正整数保存到变量num
if(isHuiHanShu(num))
printf("%d is a 回文数\n",num); //若是回文数,则屏幕上显示“是回文数”
else
printf("%d is not a 回文数\n",num); //否则,屏幕上显示“不是回文数”
return 0;
}