回文数是指从左向右念和从右向左念都一样的数。如123321就是一个典型的回文数。
给定一个进制B(2≤B≤20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
输入包括一行,为一个十进制的整数B
输出所有B进制的符合要求的数字,每行两个,第二个数是第一个数的平方,且两个数都是回文数。(此处有误,根据提交的代码通过可知,应该是 且两个数都是B进制整数 )
样例输入复制
10
样例输出复制
1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696
此题关键在如何将十进制数转换为B进制数。
- 可以使用查表法,如 l = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J'],但比较繁琐,提倡。
- def baseN(num, a):
return ((num == 0) and "0") or (baseN(num // a, a).lstrip("0") + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[num % a]) 此定义函数可以将任意十进制数转换成2~36进制数。
python程序:
def baseN(num, a):
return ((num == 0) and "0") or (baseN(num // a, a).lstrip("0") + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[num % a])
a = eval(input())
for i in range(1,301):
if baseN(i*i,a)==baseN(i*i,a)[::-1]:
print(baseN(i,a),baseN(i*i,a))