在一行上输入一个十六进制数
,代表待转换的十六进制数。
保证
转化得到的十进制数
的范围为
。
在一行上输出一个整数,代表
对应的十进制数。
0xFA93
64147
回忆十六进制转化为十进制的方法:从右往左,将第
位乘以
,然后求和。
在这个样例中,
的第
位是
,第
位是
,第
位是
,第
位是
,因此
。
s = input() maping ={'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15} s = s[::-1] s = s[:-2] h = 1 ans = 0 for c in s: ans += int(maping[c]) * h h *= 16 print(ans)
import sys if __name__ == "__main__": for line in sys.stdin: a = line.split('\n') num_hex_str = a[0][2:] print(int(num_hex_str,16))题目已经限定了输入的数的范围 1~2^32-1,就算在32位机器上,依旧可以用一个4字节长整型数表示,所以直接用语言自带的字符串-数字转换函数即可
dic = {} dic['A']= '10' dic['B']= '11' dic['C']= '12' dic['D']= '13' dic['E']= '14' dic['F']= '15' for i in range(10): dic[str(i)] = str(i) while True: try: a = input() n = 0 for i in range(2,len(a)): n = n + int(dic[a[i]])* (16**(len(a)-i-1)) print(str(n)) except: break
bits = { '0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, 'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15 } # 大数乘法(不是负数情况下)(数组元素和乘数均以数值而非字符串表示) def bigNumMul(arr, num): # 空数组直接返回 if not arr: return arr # 记录进位的数 carry = 0 # 记录每一位乘法后临时结果 mul = 0 # 从低位到高位处理 arr = arr[::-1] for i in range(len(arr)): # 每一位乘上乘数再加上低位传来的进位数 mul = num * arr[i] + carry # 取个位数赋值给当前位 arr[i] = mul % 10 # 其余位数作为进位 carry = mul // 10 # 乘完之后若最高位前还要进位,则补上 while carry > 0: arr += [carry % 10] carry = carry // 10 # 换回正常顺序 arr = arr[::-1] # 去掉最前面的0 while len(arr) > 1 and arr[0] == 0: arr = arr[1:] # 返回结果数组 return arr def bigNumAdd(arr, num): if not arr: while num > 0: arr.append(num % 10) num = num // 10 return arr[::-1] arr = arr[::-1] arr[0] += num carry = arr[0] // 10 arr[0] = arr[0] % 10 for i in range(1, len(arr)): arr[i] += carry carry = arr[i] // 10 arr[i] = arr[i] % 10 while carry > 0: arr.append(carry % 10) carry = carry // 10 return arr[::-1] while 1: try: hex_lst = input()[2:] dec_lst = [0] # 低位到高位处理 for c in hex_lst: # 整个数组乘以16进行进位 dec_lst = bigNumMul(dec_lst, 16) # 数组最低位加上当前的个位数 dec_lst = bigNumAdd(dec_lst, bits[c]) res_str = ''.join([str(e) for e in dec_lst]) print(res_str) except Exception: break