输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入在一行中给出一个以#结束的非空字符串。
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。
+-P-xf4+-1!#
-3905
代码的核心可以分为两步:
A、提取输入中的合法字符
B、转换进制
A步需要注意:
1、只录入#前的字符
2、小写a~f也被包含在其中,需要转化为大写
B步需要注意:
1、int(x, base=10)中,当base传入位置实参后,x变量类型需要为字符串而不能是数字
2、int(x, base=10)中x不能为空,所以当初始输入在#前没有合法字符时不能调用int(),而需要直接输出0
# 接收初始输入st
st = input()
# 建立空字符串s储存符合范围的字符
s = ''
# 截取st井号#前的部分录入s
for i in st:
if i == '#':
break
s += i
# 定义空字符串c储存合法字符,定义空字符串a储存负号‘-’
c, a = '', ''
# 定义negative来标志合法字符前是否存在负号‘-’
negative = True
# 遍历s
# 在合法字符前存在负号则储存进a
# i为合法字符则储存进c(由于不分大小写,我们需要将小写a~f转换为大写然后存储)
for i in s:
if i == '-' and negative:
a = '-'
negative = False
if '0' <= i <= '9' or 'A' <= i <='F':
c += i
negative = False
if 'a' <= i <= 'f':
c += i.upper()
negative = False
# 判断c中是否存在合法字符,存在则按照约定规则打印,不存在则输出0
if c != '':
print('{0}{1}'.format(a, int(c, 16)))
else:
print(0)