天天看點

palsquare-section1.2

題目大意

給定一個進制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;

}