usaco第一题
回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
青铜的水题,我竟然wrong了一次
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int n;
int a[1000005],b[100005];
int main()
{
scanf("%d",&n);
for (int i=1;i<=300;i++)
{
int tot=0;
int j=i*i;
while (j)
{
a[++tot]=j%n;
j=j/n;
}
bool o=true;
for (int i=1;i<=tot/2;i++) if (a[i]!=a[tot-i+1]) o=false;
if (o)
{
j=i;
int op=0;
while (j)
{
b[++op]=j%n;
j=j/n;
}
for (int l=op;l>0;l--) if (b[l]>=10) printf("%c",(char)(b[l]+'A'-10)/*就是这里,对于c++字符与整形的转换还不是特别熟习啊*/);else printf("%d",b[l]);
printf(" ");
for (int l=tot;l>0;l--) if (a[l]>=10) printf("%c",(char)(a[l]+'A'-10));else printf("%d",a[l]);
printf("\n");
}
}
return 0;
}