【C++ 判断回文数(回文字符串)的两种方法】

咱就是说代码这种东西不还是背嘛,基本模板都记下来啥程序都能给你整出来

工科还是逃不开背诵滴命呐.......(呜呼哀哉)

//知识点整理思路啥的我都写在注释里面辽

//法一   只能判断回文数(数字,不能判断回文字符串) 
#include<iostream>
int is_palin(int n);
using namespace std;
int main(){
	int n,k;
	cin>>n;
	while(n--){
		cin>>k;
		if(is_palin(k)){
			cout<<"yes"<<endl;
		}
		else{
			cout<<"no"<<endl;
		}
	}
	return 0;
}


int is_palin(int n){
	int n1,n2;
	for(n1=n,n2=0;n1!=0;n1/=10){  //抹去n1的个位,即n1全体右移 
		n2=10*n2+n1%10;    //将此时n1的个位接到n2的后面 
	}
/*	if(n2%10==0){  //这一段代码其实可以不用加,因为按照前面for循环的算法,n2的个位不可能是0
                     就是前面for循环的条件不是n1不等于0吗,然后执行n2的赋值语句再将n1的个位加到n2里
					 然后最后一次循环将n1的非0值加到了n2的末尾,所以这个if条件是不会触发的 
		n2/=10;
	}   */
	if(n2==n) return 1;
	else return 0;
}



//这个递归函数滴用法我感觉很牛逼,一定要背啊啊啊!!!

//法二   用递归,可以判断回文字符串 
#include<iostream>
#include<cstring>
#define maxnum 100
bool is_palin(char *s,int low,int high);
bool is_palin(char *s);    //函数is_palin被重载
using namespace std;
int main(){
	char s[maxnum];
	while(cin.getline(s,maxnum)){   //记住这种输入方式,可以限定输入字符串的上限 
		if(is_palin(s)){
			cout<<"yes"<<endl;
		}
		else{
			cout<<"no"<<endl;
		}
	}
	return 0;
}

bool is_palin(char *s,int low,int high){
	if(low>high){      //说明全部遍历一遍,确认是回文数 
		return true;
	}
	if(s[low]!=s[high]){   
		return false;
	}
	else return is_palin(s,low+1,high-1);  //使用递归 
}
bool is_palin(char *s){
	return is_palin(s,0,strlen(s)-1);  //sstrlen函数返回的是在字符串'\0'前面出现的字符的个数
	                                   //对应到数组的下表就要减1 
}

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值