题目要求
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入格式
输入在一行中给出一个以#结束的非空字符串。
输出格式
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
输入样例
±P-xf4±1!#
输出样例
-3905
代码+注释(测试点2显示0返回)
import re
char_str = input()
pattern = re.compile(r"([0-9abcdefABCDEF]|-|#)")
a = pattern.findall(char_str) # 用正则表达式找出所有的16位的字符与-#
i = 0
while a[i] == '-': # 检测16进制字符前有无-
i += 1
numb = ""
if i != 0:
numb+='-'
while i < len(a) and a[i]!='#':
if a[i]!='-':
numb+=a[i]
i+=1
print((int(numb,16))) # 16进制转10进制