判断回文数
原创
©著作权归作者所有:来自51CTO博客作者vaynedu的原创作品,请联系作者获取转载授权,否则将追究法律责任
一 回文数分析
今天考数据结构了,考完之后总有一种想要好好学习的感觉,树那一块都没有好好看一下,哎,算了,这周好好看。有的题在简单还是要好好敲一下代码,想来是想来了,其实,这个回文数是没有难度的,我就是利用i和j两个变量从数组的中间开始跑,如果遇到ch[i]不等于ch[j],那么直接退出来,并用flag标记。还有一种方式是用栈实现,先将一般的元素入栈,然后在出来进行出栈和ch中剩下的元素逐一比较。
二 代码区(就一般方法)
#include<stdio.h>
#include<string.h>
int main()
{
char ch[50]={'\0'};
int i,length,j,flag=0;
printf("请你输入一串字符 : ");
gets(ch);
length=strlen(ch);
if(length%2==0)
i=(length-1)/2;
else
i=(length-1)/2-1;
for(j=(length+1)/2;i>=0;j++,i--)
{
printf("ch[%d]=%c,ch[%d]=%c\n",i,ch[i],j,ch[j]);
if(ch[i]!=ch[j])
{
flag=1;
break;
}
}
if(flag==0)
printf("%s字符串是回文数\n",ch);
else
printf("%s该字符串不是回文数\n",ch);
return 0;
}
三 图片
1.偶数测试
2.奇数测试
3.不是回文数测试
二 通过栈实现回文数代码区
#include<stdio.h>
#include<string.h>
typedef struct node
{
char a[50];
int top;
}stack;
void initstack(stack *s) // 栈的初始化
{
s->top=0;
}
int pushstack(stack *s,char val) // 入栈
{
if(s->top==50)
return 0;
else
{
s->top++;
s->a[s->top]=val;
printf("%c入栈\n",s->a[s->top]);
return 1;
}
}
int popstack(stack *s ,char *pval) // 出栈
{
if(s->top==0)
return 0;
else
{
*pval=s->a[s->top];
printf("%c出栈\n",s->a[s->top]);
s->top--;
return 1;
}
}
int main() // 主函数
{
char ch[50]={'\0'};
char pval;
int i,j,m,flag=0;
stack s;
initstack(&s);
gets(ch);
int length=strlen(ch);
if(length%2==0)
m=(length-1)/2;
else
m=(length-1)/2-1;
for(i=0;i<=m;i++)
pushstack(&s,ch[i]);
for(j=(length+1)/2;j<length;j++)
{
popstack(&s,&pval);
if(pval!=ch[j])
{
flag=1;
break;
}
}
if(flag)
printf("%s不是回文字符串\n",ch);
else
printf("%s是回文字符串\n",ch);
return 0;
}