題目大意
給定一個進制B(2<=B<=20,由十進制表示),輸出所有的大于等于1小于等于300(十進制下)且它的平方用B進制表示時是回文數的數。用’A’,’B’……表示10,11等等。
輸入格式
line 1: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
題解
周遊十進制下1-300的所有數,将其平方用B進制表示,判斷是否是回文數,如果是則按要求輸出,不是則檢視下一個
代碼
#include<stdio.h>
#include<string.h>
int huiwen(char str[20],int len)
{
int i;
for(i=0;i<len;i++)
{
if(str[i]!=str[len-1-i])
return 0;
}
return 1;
}
/*char b(int a)
{
char b;
if(a<10)
b=a+'0';
else
b='A'+a-10;
printf("%c\n",b);
return b;
}*/
int base(long int n,int m,char *str)
{
char str1[20];
int i=0,j=0;
while(n)
{
if(n%m<10)
str1[i]=n%m+'0';
else
str1[i]=n%m-10+'A';
n=n/m;
//printf("%c\n",str1[i]);
i++;
}
i--;
for(j=0;j<=i;j++)
{
str[j]=str1[i-j];
}
return i+1;
}
int main()
{
int B,i,j,len,len1;
fscanf(fin,"%d",&B);
char str[20],str1[10];
for(i=1;i<=300;i++)
{
len=base(i*i,B,str);
if(huiwen(str,len))
{
len1=base(i,B,str1);
for(j=0;j<len1;j++)
printf("%c",str1[j]);
printf(" ");
for(j=0;j<len;j++)
printffout,"%c",str[j]);
printf("\n");
}
}
return 0;
}