题目描述
回文数是指从左向右念和从右向左念都一样的数。如 1232112321 就是一个典型的回文数。
给定一个用十进制表示的正整数 �B,输出所有 [1,300][1,300] 中,它的平方用 �B 进制表示时是回文数的数。
输入格式
共一行,一个单独的正整数 �B。
输出格式
每行两个 �B 进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。
注意大于 99 的数,用字母表示。如用 A
表示 1010,B
表示 1111,用第 �n 个大写字母表示 �+9n+9。
输入输出样例
输入 #1复制
10
输出 #1复制
1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696
说明/提示
【数据范围】
对于 100%100% 的数据,2≤�≤202≤B≤20
题目翻译来自NOCOW。
USACO Training Section 1.2
#include<bits/stdc++.h>//万能头
using namespace std;
int n;
int s[301];
void jz(int a,int b)//转换进制
{
int r=0;
while(a){
s[++r]=a%b;
a/=b;
}
s[0]=r;
}
bool change(){//判断s[i]与s[s[0]+1-i]是否相等
for(int i=1;i<=s[0];i++)
{
if(s[i]!=s[s[0]+1-i]) return false;
}
return true;
}
void print(){//打印
for(int i=s[0];i>=1;i--)
{
if(s[i]<=9) cout<<s[i];
else cout<<(char)(s[i]-10+'A');
}
}
int main()
{
cin>>n;
for(int i=1;i<=300;i++)
{//从1-300进行循环
jz(i*i,n);//调用函数
if(change()){
jz(i,n);
print();
cout<<' ';
jz(i*i,n);
print();
puts("");
}
}
return 0;
}