描述
回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
格式
PROGRAM NAME: palsquare
INPUT FORMAT:
(file palsquare.in)
共一行,一个单独的整数B(B用十进制表示)。
OUTPUT FORMAT:
(file palsquare.out)
每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。
SAMPLE INPUT
10
SAMPLE OUTPUT
1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696
题的关键是进制转化,经典短除法
基本方法n进制转为10进制:设某数(n进制)为A1A2A3……Am
那么转化成的十进制数X=Am*n^(m-1)+Am-1*n^(m-2)+……+A2*n^1+A1*n^0
10进制转为n进制:设某数(10进制)为X
使用短除法,用X除以n写出余数,再将商作为被除数再除以n并取余……最后将每次取得的余数逆向读取,所得的就是转化后的数。
这两种方法也可以扩展到n转m进制,或是m转n进制,只要把后面的计算用m进制高精度数处理即可。但是我们说的10进制,其实是指运算最快的进制(对电脑来说事实上是二进制,输出的时候才会自动转换成10进制)。这时候用上面的组合比较有效率。
把十进制s转换成b进制
PASCALwhile s<>0 do begin inc(j); k[j]:=s mod b; s:=s div b; end;
其余都好办