//之前发过的法一
#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){
long int n1,n2; //考虑数字颠倒后的溢出问题,使用用字节数更大的long int型即可
if(n<0){ //我们应该要优先考虑临界情况,比如所有负数都不可能是回文数
return 0;
}
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;
}
//算法优化,但是为毛这个优化过之后提交到lc上运行时间和内存消耗都变大了啊
#include<iostream>
bool is_palin(int k);
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int k;
cin>>k;
if(is_palin(k)==1){
cout<<"yes"<<endl;
}
else{
cout<<"no"<<endl;
}
}
return 0;
}
bool is_palin(int k){
if(k<0||k%10==0&&k!=0){ //先处理临界条件,所有负数和个位是0的数都不可能是回文数
return false;
}
int num;
for(num=0;num<k;k/=10){ //由于整个过程中不断的将原始数据除以10,
//给反转后的数字乘上10,所以当反转后的数大于原始数据时,
//就代表我们已经处理了一半位数的数了
num=num*10+k%10;
}
if(num==k||num/10==k){ //判断结果要包括奇数位数及偶数位数
return true;
}
else return false;
}
//字符串在下面