这道题还是蛮简单的,就是需要进行数制转换而已,然后判断是否是回文数即可。代码如下。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int B=0;
char bas[25]={'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J'};
int judge(string sss){
int l=sss.length();
int s=0,e=l-1;
while(s<=e){
if(sss[s]!=sss[e]){
return 0;
}
s++;
e--;
}
return 1;
}
string change(int x){
char ss[15],t[15];
int cnt=0,y=0,i=0;
while (x>=B){
y=x%B;
x/=B;
ss[cnt++]=bas[y];
}
ss[cnt++]=bas[x];
ss[cnt]='\0';
for(i=0;i<cnt;i++){
t[i]=ss[cnt-i-1];
}
t[i]='\0';
return t;
}
int main (){
freopen ("pal.in","r",stdin);
freopen ("pal.out","w",stdout);
cin>>B;
int cnt=0,y=0,x=0;
int i=1;
string s;
for (int i=1;i<=300;i++){
s=change(i*i);
if (judge(s)){
cout<<change(i)<<" "<<s<<endl;
}
}
return 0;
}