回文平方
1、十进制转其他进制:短除法
2、其他进制转十进制:秦九韶算法
3、a进制转换成b进制:(1)十进制过度;(2)直接用短除法做
4、扩展题:AcWing 124题,记得做,免费讲解
暴力枚举法
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char get(int x){
if(x<=9) return x+'0';
return x+'A'-10;
}
string base(int n,int b){
string num;
while(n) num+=get(n%b), n/=b;
reverse(num.begin(),num.end());
return num;
}
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(){
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;
}
其他进制转换成10进制
#include<iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char get(int x){
if(x<=9) return x+'0';
return x+'A'-10;
}
string base(int n,int b){
string num;
while(n) num+=get(n%b), n/=b;
reverse(num.begin(),num.end());
return num;
}
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 uget(char x){
if(x<='9') return x-'0';
return x-'A'+10;
}
int base10(string num,int b){
int res= 0;
for(auto c:num){
res = res*b + uget(c);
}
return res;
}
int main(){
int b;
cin>>b;
for(int i=1;i<=300;i++){
auto num = base(i,b);
cout<<i<<' '<<base10(num,b)<<endl;
}
return 0;
}