您的位置:首页 > 其它

【USACO】回文平方数(暴力)

2018-03-23 20:18 323 查看

题目描述

回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。 给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用'A','B'……表示10,11等等。

输入

共一行,一个单独的整数B(B用十进制表示)。

输出

每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。(注意:这两个数都应该在B进制下)

样例输入

10

样例输出

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>

char c[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'};
int n;
int fun(int num)
{
num*=num;
char a[1000];
int i=1;
while(num)
{
a[i]=c[num%n];
num/=n;
i++;
}
i--;
int flag=1;
for(int j=1;j<=i/2;j++)
{
if(a[j]!=a[i-j+1])
{
flag=0;
break;
}
}
return flag;
}

void print(int num)
{
int temp=num;
char a[1000];
int i=1;
while(num)
{
a[i]=c[num%n];
num/=n;
i++;
}
i--;
for(i;i>=1;i--)
printf("%c",a[i]);
printf(" ");
num=temp*temp;
i=1;
while(num)
{
a[i]=c[num%n];
num/=n;
i++;
}
i--;
for(i;i>=1;i--)
printf("%c",a[i]);
printf("\n");
}

int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=300;i++)
{
if(fun(i)==1)
print(i);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  USACO 暴力