vscode上1秒之内出答案,洛谷上全Re

P1015 [NOIP1999 普及组] 回文数

Andy1216 @ 2022-12-30 11:06:53

#把一个n进制列表转为10进制数
def solve(a):
    s=0
    for i in range(len(a)):
        s+=a[i]*n**(len(a)-1-i)
    return s

#把一个10进制数转化为n进制列表
def resolve(b):
    x=[]
    while b:
        a=b%n
        x.append(a)
        b=b//n
    x.reverse()
    return x

#判断回文数,用列表
def ishui(k):
    c=len(k)
    s=0
    for i in range(0,c):
        if k[i]==k[c-1-i]:
            s+=1
    if s==c:
        return 0
    else:
        return 1

n=int(input())
m1=input()
m=[int(m1[i]) for i in range(len(m1))]
#考虑在n进制下进行m的回文操作

#相加操作,直到生成回文数
#需要构建判断回文数的东西,这个应该是要轻车熟路了
#相加操作
pt=0
while ishui(m):
    if pt>=30:
        print('Impossible!')
        break
    m=resolve(solve(m)+solve(list(reversed(m))))
    pt+=1
if pt<30:
   print('STEP=%d'%pt)

|