AcWing 1346. 回文平方
原题链接
简单
作者:
不幸到吃土
,
2025-01-16 23:44:55
,
所有人可见
,
阅读 2
//进制转换:十进制转B进制--短除法(具体见y总视频)
//回文的判断:双指针
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char get(int x){ //由于B进制可能会大于10,故将大于10的部分转化为字符表示
if(x <= 9){
return x + '0';
}else{
return x - 10 + 'A';
}
}
string base(int n,int b){
string num;
while(n){ //"短除法"将十进制转化为B进制
num += get(n%b);
n /= b;
}
reverse(num.begin(),num.end()); //由于短除法是由小到大存入,故此处倒置
return num;
}
bool check(string str){
int n = str.size() - 1;
for(int i=0,j=n;i<=j;i++,j--){
if(str[i] != str[j])
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;
}
return 0;
}