解题思路:主要注意理清各指令的关系,计算指令都需要有两个数字以上,所以是在碰到数字的时候才有可能操作,放在数字的分支里.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.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论