思路
枚举1, 2, …, i ,… , 299, 300哪些数i^2在B进制下是回文数
十进制转B进制:短除法
判断回文数:双指针, reverse()
考点
- 十进制转化为B进制:短除法
- B进制转化为十进制:秦九韶算法
- A进制转化为B进制:(1)十进制过渡 (2)短除法
(3)拓展题:AcWing 124. 数的进制转换
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int b;
char get(int n)
{
if(n <= 9) return n + '0';
else return n - 10 + 'A';
}
string base(int n, int b)
{
string s;
while(n) s += get(n % b), n /= b;
reverse(s.begin(), s.end());
return s;
}
bool check(string num)
{
for(int i = 0, j = num.size() - 1; i < j; i ++ , j -- )
if(num[i] != num[j])
return false;
return true;
}
int main()
{
cin >> b;
for(int i = 1; i <= 300; i ++ )
{
string num = base(i * i, b);
if(check(num))
cout << base(i, b) << ' ' << num << endl;
}
return 0;
}