首页 > 试题广场 >

进制转换

[编程题]进制转换
  • 热度指数:896266 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

数据范围:保证结果在

输入描述:

输入一个十六进制的数值字符串。



输出描述:

输出该数值的十进制字符串。不同组的测试用例用\n隔开。

示例1

输入

0xAA

输出

170
python3的解法,就是处理数组比较麻烦,要提取到每个字符,,先把它取反,再去掉最后两个字符,得到只有16进制要处理的字符串,并找到对应的int型数字,然后用一个等于1的数,不断乘以16得到16的1次方,16的2次方,16的3次方······以此类推,再用一个数累加,字符对应的数和16的次方的乘积,就得到结果
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)

发表于 2024-02-19 02:03:57 回复(0)
这题意图是让你手写一个16进制转10进制的算法,
用小学学的进制转换方法即可:
a = input()
dict_1 = {'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}
list_1 = []   #定义空列表用来存储每一位数转换成10进制后的值,最后列表求和即可
n = 0  #小学学的进制转换方法,从右边数第n位数就乘16的n-1次方
for i in a[-1:1:-1]:
    list_1.append(dict_1.get(i,0)*(16**(n)))  #dict.get()防止输入不在字典中
    n += 1
print(sum(list_1))
编辑于 2023-10-15 09:28:17 回复(0)
我们python就是这样的
print(int(input(), 16))

发表于 2023-10-03 13:07:21 回复(0)
def trans(s):
    s = s[::-1]
    sums =0
    dicts = {
        "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,
        "x":0,
    }
    fori, n in enumerate(s):
        sums = sums + dicts[n] *16** i
    returnsums
 
 
n = input()
print(trans(n))
字典加枚举是真的方便
编辑于 2023-05-13 16:07:38 回复(1)
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字节长整型数表示,所以直接用语言自带的字符串-数字转换函数即可
发表于 2023-04-18 12:29:45 回复(0)
s = input()
print(int(s, 16))

发表于 2023-03-28 20:11:13 回复(0)
print(int(input(),16))
发表于 2023-03-01 14:28:05 回复(1)
while True:
    try:
        inpt = input()
        ints = inpt[2:]
        count = len(ints)
        A = {"A":0, "B":1, "C":2, "D":3, "E":4, "F":5}
        s=0
        for i in ints:
            count-=1
            A_key = list(A.keys())
            if i in A_key:
                s+=(A[i]+10)*16**count
            if i not in A_key:
                s+=int(i)*16**count
                
        print(s)
    except:
        break
发表于 2021-07-12 14:23:39 回复(0)
python3
while True:
    try:
        print(eval(input()))
    except Exception as e:
        break
eval()函数将去掉字符串的两个引号,将其解释为一个变量
发表于 2021-06-18 14:50:46 回复(0)
while True:
    try:
        a = input()
        print(int(a,16))
    except:
        break

发表于 2021-05-14 21:02:57 回复(0)
import sys

for line in sys.stdin:
    line = line.strip()
    print(int(line, 16))

发表于 2021-05-05 22:01:11 回复(0)
import sys
for l in sys.stdin:
    print(int(l.strip(), 16))

发表于 2021-04-21 10:26:41 回复(0)
while True:
    try:
        print(int(input()))
    except:
        break
发表于 2021-04-19 19:56:08 回复(0)
python3,用最基本的原理来解
基本原理就是每一位乘以16的i-1次方(i是右边数第几位)的和
因此创建字典,ABCDEF分别对应10到15,0-9对应0-9
代码如下:
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


发表于 2021-04-12 15:17:32 回复(0)
参考评论里大佬的C++大数乘法和加法,改了个python版本
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


发表于 2021-03-27 15:42:58 回复(0)
为什么我的程序只能输出一行
import sys
import math
d = {'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}
while True:
    try:
        a = sys.stdin.readline().strip()
        if a == '':
            break
        v = 0
        l = len(a) - 2
        for i in range(2, l + 2):
            value = d[a[i]] * math.pow(16, l - i + 1)
            v += value
        print(v)
    except:
        pass
发表于 2021-03-19 13:11:04 回复(0)
while True:
    try:
        print(int(input(), 16))
    except:
        break


发表于 2021-03-09 22:51:44 回复(0)
while True:
    try:
        line = input().replace("0x", "")
        c_dict = {"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}
        num = 0
        line = list(line)[::-1]
        for i,d in enumerate(line):
            num += c_dict[d] * (16 ** i)
            
        print(num)
    except:
        break


或:
print(int(input(),16))

编辑于 2021-03-04 23:07:33 回复(0)
while True:
    try:
        s = int(input(), 16)
    except EOFError:
        break
    print(s)


发表于 2021-03-02 12:17:21 回复(0)
shiliu = {'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
while True:
    try:
        string16 = input().split('x')[1]
        strmk = 0;i = 0
        for char in string16:
            if i<len(string16):
                strmk+=shiliu[char]*16**i
    #             print(strmk)
                i = i+1
            else:
                pass
        print(int(strmk))
    except:
        break
执行结果:
自测输入
0xA
0xAA
预期输出
10
170

实际输出
10
170

本题累计提交 6 次
收起
提交时间 运行结果 运行时间 占用内存 使用语言 详情
14秒前 答案错误

未能提交成功,有哪位大神说明一下问题在哪里吗?非常感谢
发表于 2021-02-19 23:56:57 回复(0)

问题信息

难度:
83条回答 161591浏览

热门推荐

通过挑战的用户

查看代码