白羽啊


私信TA

用户名:723822380

访问量:3187

签 名:

等  级
排  名 4467
经  验 1690
参赛次数 0
文章发表 22
年  龄 0
在职情况 学生
学  校 泉师
专  业

  自我简介:

解题思路:主要注意理清各指令的关系,计算指令都需要有两个数字以上,所以是在碰到数字的时候才有可能操作,放在数字的分支里.num中存储的永远是十进制数,只在输出时用要求的进制输出,计算就将其它进制的数转为10进制计算,


注意事项:在这个网站AC了,但官网不行,不知道哪里出问题,有测试数据的同学能评论发我,感谢!感谢!


参考代码:

def ten_to_k(n, x):  # 10进制转36以内进制
    a = [chr(i) for i in range(48, 58)]+[chr(i) for i in range(65, 91)]
    b = []
    while n > 0:
        y = n % x
        b.append(a[y])
        n = n // x
    b.reverse()
    return b


def k_to_ten(string, x):  # 36以内进制转10进制
    target = 0
    length = len(string)
    for i in range(length):
        if "0" <= string[i] <= "9":
            target += (ord(string[i]) - 48) * (x ** (length - i - 1))
        else:
            target += (ord(string[i]) - 55) * (x ** (length - i - 1))
    return target


n = int(input().strip())
num = 0 #只存储十进制表示
instruct = ""
pre_ins = "" # 存储计算指令
k = 10
for i in range(n):
    instruct = input().strip().split()
    if instruct[0] == "CLEAR":
        num = 0
        pre_ins = ""
    elif instruct[0] == "NUM":
        if pre_ins != "":#至少有一个数字才能计算
            if pre_ins == "ADD":
                num += k_to_ten(instruct[1], k)
            elif pre_ins == "SUB":
                num -= k_to_ten(instruct[1], k)
            elif pre_ins == "MUL":
                num *= k_to_ten(instruct[1], k)
            elif pre_ins == "DIV":
                num //= k_to_ten(instruct[1], k)
            elif pre_ins == "MOD":
                num %= k_to_ten(instruct[1], k)
        else:
            num = k_to_ten(instruct[1], k)
    elif instruct[0] == "EQUAL":#转成目标进制再输出
        for each in ten_to_k(num, k):
            print(each, end = "")
        print()
    elif instruct[0] == "CHANGE":#记录当前进制
        k = int(instruct[1])
    else:
        pre_ins = instruct[0]


 

0.0分

1 人评分

  评论区

  • «
  • »