洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares
题目描述
回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等
分析
这题最重要的就是进制转换以及处理10以上的数,别的不难。
#include <iostream>
#include <stdio.h>
using namespace std;
int b,i,k;
int a[1000];
bool pd(int x)
{
int s,i;
s=x;
i=0;
while (s!=0)
{
i++;
a[i]=s%b;
s=s/b;
}
k=i;
for (int j=1;j<=i/2+1;j++)
if (a[j]!=a[i-j+1]) return(false);
return(true);
}
void br(int x)
{
if (x==0) return;
br(x/b);
if (x%b<=9) printf("%d",x%b);
else printf("%c",x%b+55);
}
int main()
{
scanf("%d",&b);
for (i=1;i<=300;i++)
{
if (pd(i*i))
{
br(i);
printf("%s"," ");
for (int j=1;j<=k;j++)
if (a[j]<=9) printf("%d",a[j]);
else printf("%c",a[j]+55);
printf("\n");
}
}
}