题目描述
回文数是指数字从前往后读和从后往前读都相同的数字。
例如数字 12321 就是典型的回文数字。
现在给定你一个整数 B,请你判断 1∼300 之间的所有整数中,有哪些整数的平方转化为 B 进制后,其 B 进制表示是回文数字。
C++ 代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char get(int x){
if(x <= 9) return x + '0'; // 0-9则返回原来的数
return x - 10 + 'A'; // 大于等于10 则用A表示10,B表示11...
}
string base(int n,int b){
string num;
while(n) num += get(n % b), n /= b; // 短除法
reverse(num.begin(),num.end()); // 此时num里存的内容与真值是相反的,需要翻转一下
return num;
}
// 检查是否为回文数
bool check(string s){
int i = 0,j = s.size() - 1;
while(i < j){
if(s[i] == s[j]){
i++,j--;
}else
return false;
}
return true;
}
int main(){
int b;
cin >> b;
for(int i = 1;i <= 300;i++){
auto num = base(i * i ,b);
if(check(num)){
cout << base(i,b) << ' ' << num << endl;
}
}
}