zilvwuqiljz @ 2022-03-27 21:01:49
def N_M_add(N, M):
"""
回文数加减器:N是进制数,M是要求的数 2<=N<=10
N为int型,M为str型
"""
flag = 0
lenM = len(M) # M的长度
M_re = M[::-1] # M的逆序数
s_list = []
for i in range(1, lenM + 1):
t = 0
k = int(M_re[-i]) + int(M[-i]) + flag
ys = k % N
if k >= N:
flag = 1
else:
flag = 0
s_list.insert(-t, '{}'.format(ys)) # 插到列表后面
if (i == lenM and flag == 1):
s_list.insert(0, '1') # 插到列表后面
t = t + 1
s = ''.join(s_list)
return s
i = 1
N = input() # N是进制数
M = input() # M是要求的数
a = []
while (1):
suc_flag = 1
if N == '16':
M1 = str(int("{}".format(M), 16)) # 先把这个数转成10进制
conf = N_M_add(10, M1)
conf_1 = hex(int(conf)) # 再把结果转回16进制
conf_1 = conf_1[-2:] # 去除前缀的0x
if conf_1 == conf_1[::-1]:
break
else:
i = i + 1
M = conf_1
if i > 30:
suc_flag = 0
i = 0
break
else:
conf = N_M_add(int(N), M)
if conf == conf[::-1]:
break
else:
i = i + 1
M = conf
if i > 30:
suc_flag = 0
i = 0
break
if (suc_flag):
print('STEP={}'.format(i))
else:
print('Impossible!')
怎么把最后一个回车读入去掉啊啊啊啊啊,我太菜了....
by Terrible @ 2022-03-27 21:08:17
@zilvwuqiljz
N=input().strip()
M=input().strip()
strip
是字符串型的一个方法,将头尾的空白字符去掉。括号中也可放入特性的字符,它可以将首位特定字符去掉。
与它这一方法类似的有 lstrip
,去除字符串头部开始的空白字符,rstrip
,去除字符串尾部开始的空白字符。
解释器中示例:
>>> 'qwq'.strip('q')
'w'
>>> 'qwq'.lstrip('q')
'wq'
>>> 'qwq'.rstrip('q')
'qw'
>>>
即便是去掉末尾空白字符,你的程序好像也仍然有点小毛病。
by zilvwuqiljz @ 2022-03-27 21:32:38
@Terrible 蟹蟹大佬!确实,我改了之后只有75分第二个错了,大佬可以帮忙看看小毛病在哪吗
by zilvwuqiljz @ 2022-03-27 21:46:43
@Terrible 噢噢 应该是十六进制那边计算出问题了 我知道了,再次蟹蟹大佬
by Terrible @ 2022-03-27 21:50:09
@zilvwuqiljz
你这个写得有点啰嗦啊,没有发挥好Python简洁的优势。
conf_1 = conf_1[-2:] # 去除前缀的0x
去除前缀0x应该是 conf_1 = conf_1[2:]
。
其它的错我就不去找了(我太懒了),你看一下我写的,应该比你的简洁一些。
def basestr(base=int,num=int):#将int型转化成对应进制数的str型
if base==16:
return hex(num)[2:]
s=""
while num:
s=str(num%base)+s #num%base可以说是base进制下的个位
num//=base #num除以base(整除)
#相当于把所有位置的数右移了,例如:
#178//10=17,把个位舍去,之前的位右移
return s
a=int(input())# 输入进制,int自动去掉空白字符
b=int(input(),a)# int(str1,base)可以将str1以base进制转化成int型
step=0
while True:# while True: 需要break否则程序无法停止
if step==30 :# 超过步数
print("Impossible!")
break
s=basestr(a,b) # s是a进制数的str型
s1=s[::-1] # s1是反转了的s
if s==s1 :# 是回文数
print("STEP=%d"%step)
break
b+=int(s1,a)
step+=1
by zilvwuqiljz @ 2022-03-27 21:56:33
@Terrible nb 我再去研究研究