题目链接
浅浅的记录我的洛谷python刷题情况
问题重述
题目描述
输入格式
输出格式
输入输出样例
#样例1
输入:
10
87
输出:
STEP=4
大概思路
这题很简单,就是有一个很大的坑,就是读入的数据会有一个回车,如果没有处理掉的话就会RE,这个坑让我花了将近2个小时,贼难受
首先我们就是要知道怎么判断回文数,判断回文数的方法有很多,python更简单,利用字符串即可
再就是进制的相加,十进制的相加我们熟悉吧,任意进制相加的原理都是一样的,所以我们就依葫芦画瓢就行了,我们可以在纸上随便编个8进制或者16进制或则2进制的任意两个数的加法,然后自己试着加一下就能懂了,接下来直接上代码
完整AC代码
def is_huiwen(number):
return number == number[::-1]
def add(number, n):
if n == 10:
return str(int(number) + int(number[::-1]))
c = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', "A", "B", "C", "D", "E", "F"]
e = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
d = dict(zip(c, e))
a = number
tag = 0 # 进位
s = ""
for i in range(len(a)):
# 对应的位相加
if tag:
t = d[a[i]] + d[a[len(a) - i - 1]] + tag
else:
t = d[a[i]] + d[a[len(a) - i - 1]]
if t >= n:
tag = t // n
s = c[t % n] + s
else:
s = c[t] + s
tag = 0
if tag:
s = c[tag] + s
return s
def main():
N = int(input())
M = input().strip()
step = 0
while step <= 30:
if is_huiwen(M):
print(f"STEP={step}")
break
else:
M = add(M, N)
step += 1
else:
print("Impossible!")
if __name__ == "__main__":
main()