在猪的世界里有一种数叫猪数,猪是这么定义猪数的:给定一个进制B(2<=B<=20,B用十进制表示),在这个进制下,这个数的平方从左向右念和从右像左念都一样,用‘A’,‘B’……表示10,11等等。
例如:B=10时,121就是一个猪数,因为121的平方14641满足条件。
你的任务是编写一个程序,求出所有大于等于1小于等于300的猪数。
Input
输入包含多组测试数据,请处理到EOF结束。
每组测试数据,由一行组成,为一个单独的整数B(B用十进制表示)。
Output
对每组数据输出:每行两个数字,第二个数是第一个数的平方,且第一个数是猪数。(注意:这两个数都应该在B那个进制下)
Sample Input
10
15
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
2 4
3 9
4 11
8 44
C 99
11 121
14 191
22 484
29 6B6
44 1331
51 1AA1
88 4CC4
99 6226
101 10201
111 12321
121 14641
131 16B61
从1-300依次枚举判断,用到进制转换和回文串判断。思路简单就是挺麻烦。
#include<stdio.h>
#include<string.h>
char s1[100],s2[100];
void restoration()
{
for(int i=0;i<100;i++)
{
s1[i]='\0';
s2[i]='\0';
}
}
bool check(char str[])
{
int i,flag=0;
int l=strlen(str);
for(i=0;i<=l/2;i++)
{
if(str[i]!=str[l-1-i])
{
flag=1;
break;
}
}
if(flag)
return false;
else
return true;
}
void change(int i,int n)
{
int t=i*i;
int k;
int c;
k=0;
while(1)
{
if(t==0)
break;
c=t%n;
if(c>9)
s1[k++]='A'+(c-10);
else
s1[k++]='0'+c;
t=t/n;
}
if(check(s1))
{
k=0;
while(1)
{
if(i==0)
break;
c=i%n;
if(c>=10)
s2[k++]='A'+(c-10);
else
s2[k++]='0'+c;
i=i/n;
}
int l=strlen(s2);
for(int j=l-1;j>=0;j--)
{
printf("%c",s2[j]);
}
printf(" ");
l=strlen(s1);
for(int j=l-1;j>=0;j--)
{
printf("%c",s1[j]);
}
printf("\n");
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
restoration();
for(i=1;i<=300;i++)
{
change(i,n);
}
}
}