回文数是指从左向右念和从右向左念都一样的数。如123321就是一个典型的回文数。
给定一个进制B(2≤B≤20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。
输入包括一行,为一个十进制的整数B
输出所有B进制的符合要求的数字,每行两个,第二个数是第一个数的平方,且两个数都是回文数。(此处有误,根据提交的代码通过可知,应该是且两个数都是B进制整数)
样例输入复制
10
样例输出复制
1 12 43 911 12122 48426 676101 1011 12321121 14641202 40804212 44944264 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))