Acwing 1346.回文平方
题目链接:
解题步骤:
核心:1.进制转换 2.回文判断
进制转换:
十进制转其他进制:短除法
数字转字符串(进制范围:2≤B≤20)
短除法:
短除法的操作有三个步骤:
- 求余
- 求商
- 对结果进行翻转
回文判断:
第一种:将结果进行翻转,与原理的结果进行对比,如果一样则是回文
第二种:双指针,头尾对比,有一个不同则不是回文
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
// 数字转字符串
char get(int a)
{
char res;
if(a <= 9){
res = '0' + a;
return res;
}else{
res = 'A' + (a-10);
return res;
}
}
// 短除法:10进制转其他进制
string base(int a,int b)
{
string res;
while(a)
{
res += get(a % b);
a /= b;
}
reverse(res.begin(),res.end());
return res;
}
bool check(string a)
{
string tmp = a;
reverse(a.begin(),a.end());
if(tmp == a)return true;
return false;
}
int main()
{
int b;
cin>>b;
for(int i = 1; i <= 300; i ++)
if(check(base(i * i,b)))
cout<<base(i,b)<<' '<<base(i*i,b)<<endl;
return 0;
}