itoa可以直接把10进制的整数转化为其他进制的字符串 再判断一下回文就完了
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
int base;
//判断回文
bool reverse(char* str)
{
int len = strlen(str);
for (int i = 0; i <= len / 2 - 1; i += 1) if (str[i] != str[len - 1 - i]) return 0;
return 1;
}
//十进制转任意进制
void analysis(long long value)
{
//其他进制的数值字符串
char baseValue[40], baseSquare[40];
//直接用itoa进行进制转化
itoa(value, baseValue, base);
itoa(value * value, baseSquare, base);
int len = strlen(baseSquare);
//判断出回文就进行输出, 大写转小写
for (int i = 0; baseValue[i] != 0; i += 1) if (baseValue[i] >= 'a' && baseValue[i] <= 'z') baseValue[i] -= 32;
for (int i = 0; baseSquare[i] != 0; i += 1) if (baseSquare[i] >= 'a' && baseSquare[i] <= 'z') baseSquare[i] -= 32;
if (reverse(baseSquare)) cout << baseValue << " " << baseSquare << endl;
return;
}
int main()
{
cin >> base;
for (long long i = 1ll; i <= 300ll; i += 1) analysis(i);
return 0;
}
这个在本地运行当然是AC了 提交以后结果ce