首页 > 试题广场 >

进制回文数

[编程题]进制回文数
  • 热度指数:4621 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
如果一个数字从左边读和从右边读一样,那么这个数字就是一个回文数。例如32123就是一个回文数;17在某种意义上也是一个回文数,因为它的二进制型式——10001——是一个回文数。
请你帮忙开发一个程序,判断一个数n在任意进制(2-16)下是否有回文数。

输入描述:
输入包含多组数据。
每组数据包括一个正整数n (1≤n<2^31)。


输出描述:
对应每组数据,如果n在2-16进制下存在回文数,则输出“Yes”;否则输出“No”。
示例1

输入

32123<br/>17

输出

Yes<br/>Yes
def baseN(num,b):
    return ((num==0) and '0') or (baseN(num/b,b).lstrip('0')+'0123456789ABCDEF'[num%b])
while True:
    try:
        s=int(raw_input())
        ss=[baseN(s,b) for b in range(2,17)]
        print 'Yes' if not {cmp(a,a[::-1]) for a in ss}<={1,-1}else 'No'
    except:
        break
发表于 2019-01-11 18:33:33 回复(3)
def jinzhi(n,m):
    s=''
    fu='0123456789abcdefgh'
    while n:
        s=fu[n%m]+s
        n=n//m
    return s
def huiwen(s):
    return s==s[::-1]
while True:
    try:
        n=int(input())
        for i in range(2,17):
            if huiwen(jinzhi(n,i)):
                print('Yes')
                break
        else:
            print("No")
    except:
        break

发表于 2018-11-21 20:00:57 回复(0)

python solution:

def baseN(num, b):
    return ((num == 0) and "0") or (baseN(num // b, b).lstrip("0") + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])
while True:
    try:
        a,havaParo=int(input()),False
        for i in range(2,17):
            if baseN(a,i)==baseN(a,i)[::-1]:
                havaParo=True
                break
        print("Yes" if havaParo else "No")

    except:
        break
发表于 2017-10-11 06:26:04 回复(4)