题目描述 Description
回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
输入描述 Input Description
共一行,一个单独的整数B(B用十进制表示)。
输出描述 Output Description
每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。
样例输入 Sample Input
10
样例输出 Sample Output
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
# include <stdio.h>
int B, N;
int len;
char a[20];
void Turn(int n)
{
int i = 0;
int t;
len = 0;
if( B>=2 && B<10 )
{
while( n > 0 )
{
a[i] = n % B + '0';
n = n / B;
i++;
len++;
}
}
else if( B >= 10 && B <= 20 )
{
while( n > 0 )
{
t = n % B;
if( t < 10 )
a[i] = t + '0';
else if( t == 10 )
a[i] = 'A';
else if( t == 11 )
a[i] = 'B';
else if( t == 12 )
a[i] = 'C';
else if( t == 13 )
a[i] = 'D';
else if( t == 14 )
a[i] = 'E';
else if( t == 15 )
a[i] = 'F';
else if( t == 16 )
a[i] = 'G';
else if( t == 17 )
a[i] = 'H';
else if( t == 18 )
a[i] = 'I';
else if( t == 19 )
a[i] = 'J';
n = n / B;
i++;
len++;
}
}
}
int IsHuiWen()
{
int i;
int j;
Turn(N);
i = 0;
j = len - 1;
while( i < j )
{
if( a[i] != a[j] )
return 0;
i++;
j--;
}
return 1;
}
void Show(int m)
{
int i;
Turn(m);
for( i=len-1; i>=0; i-- )
printf("%c", a[i]);
}
int main()
{
int i;
int flag;
scanf("%d", &B);
for( i=1; i<=300; i++ )
{
N = i * i;
flag = IsHuiWen();
if( flag == 1 )
{
Show(i);
printf(" ");
Show(N);
printf("\n");
}
}
return 0;
}
该博客探讨了USACO竞赛中的一个问题,即找到平方数并判断其是否为回文数。内容涉及如何识别和处理这样的整数。
5690

被折叠的 条评论
为什么被折叠?



