Description
回文数是指从左向右念和从右像做念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20十进制),输出所有的大于等于1小于等于300且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
Input
共一行,一个单独的整数B(B用十进制表示)。
Output
每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。(注意:这两个数都应该在B那个进制下)
Sample Input
10
Sample Output
1 1
2 4
3 9
11 121
22 484
26676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
解题思路:从1到300进行循环,进行判断,如果它是循环的话,就进行处理,并判断它在该进制以及它的平方数是否回文,如果是的话就输出。
程序:
var
arr:array[0..1000]of char;
n,count,i,j:longint;
function check(count:longint):longint;
var
a,i:longint;
begin
a:=count div 2;
for i:=0 to a do
if arr[i]<>arr[count-i] then exit(0);
exit(1);
end;
function convert(i,n:longint):longint;
var
q:longint;
begin
q:=-1;
while i<>0 do
begin
q:=q+1;
if i mod n>=10 then arr[q]:=chr(i mod n-10+ord('A'))
else arr[q]:=chr(i mod n+48);
i:=i div n;
end;
exit(q);
end;
procedure convert_2(i,n:longint);
var
crr:array[0..1000]of char;
q,j:longint;
begin
q:=-1;
while i<>0 do
begin
q:=q+1;
if i mod n>=10 then crr[q]:=chr(i mod n-10+ord('A'))
else crr[q]:=chr(i mod n+48);
i:=i div n;
end;
for j:=q downto 0 do
write(crr[j]);
write(' ');
end;
begin
readln(n);
for i:=1 to 300 do
begin
count:=convert(i*i,n);
if check(count)<>0 then
begin
convert_2(i,n);
for j:=count downto 0 do
write(arr[j]);
writeln;
end;
end;
end.