小丽找半个回文数
小丽同学在编程中学到了回文数的概念,如果一个数正过来读和反过来读是同一个数,那么这个数就是回文数;比如:2、5、8、66、121、686、12321都是回文数,小丽发现,这样的数不算多。于是小丽有个想法,如果这个数不是回文数,但这个数在2进制或者16进制下是回文数,就算这个整数是半个回文数,比如417并不是回文,但417对应的16进制数是1A1是回文数,因此417算半个回文数。
请你编程帮助小丽找符合条件的半个回文数。
第一行是一个整数n(10<=n<=100)
第二行是n个整数(这些整数都是0~999999999之间的整数)
所有符合条件的半个回文数,每行一个。
样例输入
5
121 417 27 100 21
样例输出
417
27
21
代码:
#include<bits/stdc++.h>
using namespace std;
string p(int a,int b)
{
string s;
int c=0;
while(a)
{
if(a%b<10)s=char(a%b+'0')+s;
else s=char(a%b-10+'A')+s;
a/=b;
}
return s;
}
int n,x;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
string s1=p(x,2),s2=p(x,16);
int w=0,s=0;
for(int i=0,j=s1.size()-1;i<=j;i++,j--)
if(s1[i]!=s1[j])w=1;
for(int i=0,j=s2.size()-1;i<=j;i++,j--)
if(s2[i]!=s2[j])s=1;
if(w=&#