思路
从1到300依次判断每个数,为了重用代码,我们可以自定义几个函数:
vector< char > trans(int k, int N) : 把数字k的N进制表示倒序放进一个vector中;
bool judge(vector< char >& v) : 判断v是否是一个回文串;
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
vector<char> trans(int k, int N){
int a = 0;
vector<char> res;
while(k > 0){
a = k % N;
if(a >= 0 && a <= 9) res.push_back(a + '0');
else res.push_back(a - 10 + 'A');
k = k / N;
}
return res;
}
bool judge(vector<char>& v){
int mid = v.size() / 2 - 1;
bool res = true;
for(int i = 0; i <= mid; i ++){
if(v[i] != v[v.size() - i - 1]) {
res = false; break;
}
}
return res;
}
void myprintf(vector<char>& v){
for(int i = v.size() - 1; i >= 0; i --) printf("%c", v[i]);
}
int main(){
int N;
scanf("%d", &N);
for(int k = 1; k <= 300; k ++){
vector<char> v1 = trans(k, N);
vector<char> v2 = trans(k * k, N);
if(judge(v2)) {
myprintf(v1);
printf(" ");
myprintf(v2);
printf("\n");
}
}
return 0;
}