回文串的判断以及存储(多种判断方法)

对于字母或者数字类型均可以(可以对两者进行相互转化)类型的用第二种(栈和队列)对于数字用第一种算法
提前说一下写这个题的小背景,在学校训练了几天在等待开学的过程中实在是太过于无聊就回顾一下以前学过的基础和一些算法吧!
简单说一下回文串:
回文串是说正着读或者反着读都一样的字串,或者为一个整数(这个无所谓可以根据题目自行修改下面的模板),简单思想就是对所求数反着存到另一个数,判断两个数是否相等,相等就输出过程中的数不是的话本来的数加上反着存的数继续往下判断就好;
下面是写的一个简单代码:

#include<stdio.h>
int get_f(int k)
{
	int i,m=0,t;
	int s=k;
	while(s>0)
	{
		m=m*10+s%10;
		s/=10;
	}
	return m==k?1:m;
} 
int main()
{
	int a[200],n,i,j;
	while(scanf("%d", &n))
	{
		a[0]=n;
	for(i=1; ;i++)
	{
		if(get_f(n)==1)
		break;
		else
		{
			n+=get_f(n);
			a[i]=n;
		}
	}
	for(j=0; j<i; j++)
		printf("%d ", a[j]);
	printf("\n");
	}
	
	return 0;
 } 

下面是栈的方式判断:
核心思想就是将前一部分存入另一个字串然后进行比较判断;看代码中间的解释应该可以看懂!

#include<stdio.h>
#include<string.h>
int main()
{
   int len,next,i;
   char s[200],a[200];
   while(gets(s))
   {
     len=strlen(s);
     int mid=len/2-1;
     int top=0;
     for(i=0; i<=mid; i++)
        a[++top]=s[i];//top=0时并没有储存字符 
     if(len%2==0)
       next=mid+1;
     else
       next=mid+2;
     for(i=next; i<=len-1; i++)
     {
     	if(a[top]!=s[i])
     	   break;
     	top--;
     }
     if(top==0)
     printf("YES\n");
     else
     printf("NO\n");
   }
   return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮皮皮皮皮皮卡乒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值