题意概述:
给定一个进制,如果一个数的平方在该进制下是一个回文数字则符合条件,求1-300内所有满足条件的数字。
解题思路:
对于每个数字,要先求出来这个数字的平方在该进制下的表示,然后判断是否是回文数就好了,简单的进制转换。
题解代码:
/*
ID: ID
PROG: palsquare
LANG: C++11
*/
#include<bits/stdc++.h>
using namespace std;
bool isok(char s[]){
char t[2000]={0};
int k=strlen(s);
for(int i=k-1;i>=0;i--){
t[i]=s[k-i-1];
}
if(strcmp(t,s)==0)
return 1;
return 0;
}
void Itoa(int l,char s[],int p){
char t[2000]={0};
int k=0;
while(l>0){
if(l%p<10)t[k++]='0'+l%p;
else t[k++]='A'+l%p-10;
l=l/p;
}
for(int i=k-1;i>=0;i--){
s[i]=t[k-i-1];
}
}
int main(){
ifstream fin("palsquare.in");
ofstream fout("palsquare.out");
int b;
fin>>b;
for(int i=1;i<=300;i++){
char s[2000]={0},st[2000]={0};
Itoa(i*i,s,b);
Itoa(i,st,b);
if(isok(s))fout<<st<<" "<<s<<endl;
}
return 0;
}