本題的關鍵是進制轉換,如何將10進制數轉換爲B進制(2<=B<=20),大於9的數字用大寫字母表示(類似16進制)。程序關鍵在於進制轉換函數的書寫。
代碼如下:
/*
ID: michael139
LANG: C
PROG: palsquare
*/
#include<stdio.h>
#include<string.h>
int tenToB(int ten,char B[150],int b);
int main () {
FILE *fin = fopen("palsquare.in", "r");
FILE *fout = fopen("palsquare.out", "w");
int b,i,j,len,ok;
char B[150],B2[150];
while (fscanf(fin,"%d",&b) != EOF) {
for (i=1;i<=300;i++) {
len = tenToB(i*i,B,b);
ok = 1;
for (j=0;j<len/2;j++) {
if (B[j]!=B[len-j-1]) {
ok = 0;
break;
}
}
if (ok) {
tenToB(i,B2,b);
fprintf(fout,"%s %s\n",B2,B);
}
}
}
return 0;
}
int tenToB(int ten,char B[150],int b) {
int i,len = 0,bit;
char TB[150];
while (ten!=0) {
bit = ten % b;
if (bit<=9) {
TB[len++] = bit+'0';
} else {
TB[len++] = bit-10+'A';
}
ten /= b;
}
for (i=len-1;i>=0;i--) B[len-i-1] = TB[i];
B[len] = '\0';
return len;
}