咱就是说代码这种东西不还是背嘛,基本模板都记下来啥程序都能给你整出来
工科还是逃不开背诵滴命呐.......(呜呼哀哉)
//知识点整理思路啥的我都写在注释里面辽
//法一 只能判断回文数(数字,不能判断回文字符串)
#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
}