52 回文平方数
作者: xxx时间限制: 1S章节: 一维数组
问题描述 :
回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。 给定一个进制B(2=<B<=20进制),输出所有的大于等于1小于等于300且该数的平方用B进制表示时是回文数的数(该数本身不要求是回文数)。
输入说明 :
共一行,一个单独的整数B(B用十进制表示,比如18)。
输出说明 :
每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。
注意:输出时,这两个数都应该以B进制表示。
在输出时,数字10到20分别以A到K代替。
输入范例 :
20
输出范例 :
1 1
2 4
3 9
4 G
11 121
22 484
25 515
33 9I9
DD 9669
代码
#include <stdio.h>
int main()
{
int B,n,m;
int ten[301];
char num[21];
char qu[20], st1[20],st2[20],st3[20];
int front = 0, rear = 0, top1 = -1, top2 = -1,top3=-1;
for (int i = 0; i < 21; i++)//进制
{
if (i < 10)
{
num[i] = '0' + i;
}
if (i >= 10)
{
num[i] = 'A' + (i - 10);
}
}
for (int i = 1; i <= 300; i++)//平方
{
ten[i] = i*i;
}
scanf("%d", &B);
for (int i = 1; i <= 300; i++)
{
n = ten[i];
while (n != 0)
{
top1++; top2++; rear++;
st1[top1] = st2[top2] = qu[rear] = num[n%B];
n /= B;
}
while (top1 > -1)
{
if (st1[top1--] != qu[++front])
{
break;
}
}
if (top1 == -1)
{
if (i >= B)
{
m = i;
while (m != 0)
{
top3++;
st3[top3] = num[m%B];
m /= B;
}
while (top3 > -1)
{
printf("%c", st3[top3--]);
}
printf(" ");
while (top2 > -1)
{
printf("%c", st2[top2--]);
}
printf("\n");
}
else
{
printf("%c ", num[i]);
while (top2 > -1)
{
printf("%c", st2[top2--]);
}
printf("\n");
}
}
front = 0, rear = 0, top1 = -1, top2 = -1, top3 = -1;
}
return 0;
}