简单的进制转换,判断回文数的话可以利用字符串判断

program palsquare;
var
a:array[1..300] of longint;
n,i,v:integer;
p1,p2:longint;
s,ss:string;
procedure first;
var
i:integer;
begin
for i:=1 to 300 do
a[i]:=i*i;
end;
procedure change(p:longint);
var
s1:string;
x:longint;
j:integer;
begin
x:=p;
s:='';
while x>0 do
begin
str(x mod n,s1);
if x mod n<10 then s:=s+s1
else s:=s+chr((x mod n-10)+ord('A'));
x:=x div n;
end;
s1:=s;
s:='';
for j:=length(s1) downto 1 do
s:=s+s1[j];
end;
function check(s:string):boolean;
var
s1:string;
i:integer;
begin
s1:='';
for i:=length(s) downto 1 do
s1:=s1+s[i];
if s1=s then exit(true)
else exit(false);
end;
begin
assign(input,'palsquare.in');
reset(input);
assign(output,'palsquare.out');
rewrite(output);
readln(n);
first;
for i:=1 to 300 do
begin
change(a[i]);
if check(s) then
begin
ss:=s;
change(i);
writeln(s,' ',ss);
end;
end;
close(input);
close(output);
end.