回文平方数
题目描述
回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
分析:主程序不长,枚举1~300并判断,转B进制的时候存数组里,最后注意大于10要输出字母!
代码
var
a:array[0..10000] of longint;
s:string;
p,i,j,n:longint;
procedure change(x:longint);
begin
p:=0;
while x<>0 do
begin
inc(p);
a[p]:=x mod n;
x:=x div n;
end;
end;
function check:boolean;
var
i,j:longint;
begin
check:=true;
i:=1;j:=p;
while i<=j do
begin
if a[i]<>a[j] then exit(false);
inc(i);dec(j);
end;
end;
begin
readln(n);
for i:=1 to 300 do
begin
change(sqr(i));
if check then
begin
change(i);
for j:=p downto 1 do
if a[j] in [0..9] then write(a[j]) else write(chr(a[j]+55));
change(sqr(i));
write(' ');
for j:=p downto 1 do
if a[j] in [0..9] then write(a[j]) else write(chr(a[j]+55));
writeln;
end;
end;
end.