回文判断方法
回文数的概念:
设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。即给定一个数,这个数正读和反读都相同,则称这个数为回文数。例如:121、1221是回文数;123、1231不是回文数。
正读和反读都相同的字符序列称为“回文”序列。
方法一
**判断正整数是否是回文数。(处理在int型或long long型范围内的数字)
分析:将整数x逆转,逆转的方法就是利用求余%和除/的思想。
#include<stdio.h>
int main(void)
{
int x,num,t,n;
while(scanf("%d",&x)!=EOF)
{
num=0;
n=x;
do
{
num=num*10+x%10;
x/=10;
}while(x>0);
if(n==num)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
方法二:
判断正整数是否是回文数。(该正整数不一定在int型或long long型范围内)
分析:对于大数字,可使用字符串处理方式。
#include<stdio.h>
#include<string.h>
int main(void)
{
int i,len,flag=1;
char str[100];
gets(str);
len=strlen(str);
for(i=0;i<=len/2;i++)
{
if(str[i]!=str[len-1-i])
{
flag=0;
break;
}
}
if(flag==1)
printf("Yes");
else
printf("No");
return 0;
}
方法三
使用栈的思想判断回文数。
分析:利用栈的“先进后出”的特性,先将前一半字符入栈,然后从栈中弹出字符与后一半字符逐个作比较。
#include<stdio.h>
#include<string.h>
typedef struct
{
char data[100];
int top;
}SeqStack;
int main(void)
{
SeqStack s;
char str[100];
int i,len,flag=1;
scanf("%s",str);
len=strlen(str);
s.top=-1;
for(i=0;i<len/2;i++) //将前一半字符入栈
s.data[++s.top]=str[i];
if(len%2) i++; // 若输入字符为奇数个时自动跳过中间的字符
while(s.top!=-1) //若栈非空
{ // 栈中弹出字符与后一半字符逐个作比较
if(s.data[s.top--]!=str[i])
{
flag=0;
break;
}
else
i++;
}
if(flag==1)
printf("Yes\n");
else
printf("No\n");
return 0;
}